2010-05-10 10 views
2

Actuellement, je travaille sur une application qui dépend de nombreux services Web externes. Quelques-uns d'entre eux sont authorize.net et accusent. Lors du test (test manuel) d'autres choses que l'intégration avec ces services Web, je remplace ces dépendances de service Web par de fausses versions qui ne font vraiment rien. La façon dont je le fais dès maintenant, est en utilisant la ligne de code suivante dans la carte classe de registre de la structure:Meilleure façon de simuler des services Web externes lors du test d'une application Web en cours de développement

For<IChargifyService>().Use<MockChargifyService>(); //uncomment this line to use a mock chargify service 

J'ai des lignes similaires dans le registre pour d'autres services faux. Je les commente lors du déploiement pour que les vrais services soient utilisés en production. Les implémentations de service réel et faux sont présentes dans l'assembly Infrastructure.

Le problème avec cette approche est que je dois rappeler pour décommenter les lignes avant le déploiement. Je sais qu'il existe un moyen de le faire en utilisant Structure Xml Config, mais je me demandais s'il y avait une meilleure façon de le faire. Est-ce que la création d'un assemblage Mock Infrastructure serait une bonne idée?

Répondre

1

Il y a deux manières que je peux penser:

1) Vous pouvez créer un ensemble séparé, comme vous le suggérez, qui contient toutes vos implémentations simulacres. Vous devez également inclure un Registre dans cet assembly qui définit les implémentations fictives comme valeurs par défaut. Le Registre dans votre assemblage principal devrait faire une analyse que pour éventuellement charger votre assemblage maquette - quelque chose comme:

Scan(x => 
{ 
    x.TheCallingAssembly(); 
    x.AssembliesFromApplicationBaseDirectory(); 
    x.LookForRegistries(); 
}); 

2) Une autre option est de créer un profil pour votre simulacres:

Profile("Test", x => 
{ 
    x.For<IChargifyService>().Use<MockChargifyService>(); 
    // etc. 
}); 

Puis quelque part dans votre application, vous appelleriez:

ObjectFactory.Profile = "Test"; 

en fonction de certaines conditions d'environnement qui indiquent que vous êtes en mode test.

+0

Merci :) Je pense à aller avec l'option de profil, il ressemble à l'option la plus flexible. –