Utilisation de StructureMap avec des tests unitaires

J’utilise StructureMap dans un projet Web pour DI IOC. Cela fonctionne parfaitement, mais je ne sais pas comment écrire des tests unitaires avec StructureMap.

Devrais-je faire cela dans AssemblyInitialize? Démarrez la configuration de StructureMap comme dans global.asax sauf que datacontext n’utilise pas Live LinqToSqlDataContext mais certaines données de mémoire comme celle-ci:

[AssemblyInitialize] public static void Start() { ObjectFactory.Configure(x => { x.For().HttpContextScoped().Use() .Ctor("connectionSsortingng") .Is(ConfigurationManager.ConnectionSsortingngs["DEVConnection"].ConnectionSsortingng); x.For().Use(); x.For().Use().OnCreation(c => c.User = Current.CurrentUser); x.For().Use().OnCreation(c=> c.User = Current.CurrentUser); x.For().Use(); x.For().Use(); x.For().Use(); x.For().Use(); x.For().Use(); x.For().Use(); } ); } 

puis utilisez le test ObjectFactory.GetInstance () ou comment puis-je procéder?

Vous ne devriez pas du tout utiliser un conteneur DI dans les tests unitaires .

Un conteneur est quelque chose que vous utilisez pour câbler des composants ensemble, mais un test unitaire est un test de chaque composant isolé.

Je suis d’accord avec Mark. La testabilité est l’une des principales raisons pour lesquelles vous utilisez probablement un conteneur en premier lieu.

Il est parfois utile de créer un test d’intégration pour la configuration de votre conteneur. Par exemple, si vous avez un comportement dans votre configuration de conteneur, vous voudrez créer des tests pour ce comportement. Dans votre configuration de conteneur, vous définissez la chaîne de connexion d’ IDataContext via le gestionnaire de configuration.

Le code suivant est similaire à ce que je fais pour tester une telle configuration. Notez que j’évite ObjectFactory (les objects singleton statiques ont leurs propres problèmes) et enveloppe ma configuration de conteneur dans une classe d’aide au démarrage:

 [Test] public void connection_ssortingng_should_come_from_application_configuration() { var container = new ContainerBootstraper().Container; var connectionSsortingng = container.GetInstance().ConnectionSsortingng connectionSsortingng.ShouldEqual("test project application configuration connection ssortingng"); }