J'utilise StructureMap dans un projet Web pour DI IOC. Cela fonctionne parfaitement, mais je n'ai aucune idée de comment écrire des tests unitaires avec StructureMap.Utilisation de StructureMap avec des tests unitaires
dois-je faire cela dans AssemblyInitialize commencer Configuration de StructureMap comme dans global.asax sauf pour datacontext de ne pas utiliser LinqToSqlDataContext en direct, mais certaines données de la mémoire comme celle-ci:
[AssemblyInitialize]
public static void Start()
{
ObjectFactory.Configure(x =>
{
x.For<IDataContext>().HttpContextScoped().Use<MemoryDataContext>()
.Ctor<string>("connectionString")
.Is(ConfigurationManager.ConnectionStrings["DEVConnection"].ConnectionString);
x.For<IDepartamentRepository>().Use<DepartamentDB>();
x.For<IDevelopmentProcess>().Use<DevelopmentProcesses>().OnCreation(c => c.User = Current.CurrentUser);
x.For<IActivityProcess>().Use<ActivitiesProcess>().OnCreation(c=> c.User = Current.CurrentUser);
x.For<IDevDeveloperRepository>().Use<DevDeveloperDB>();
x.For<IDevelopmentRepository>().Use<DevelopmentDB>();
x.For<IActivityRepository>().Use<ActivityDB>();
x.For<IActivityTypeRepository>().Use<ActivityTypeDB>();
x.For<IDevUserRepository>().Use<DevUsersDB>();
x.For<IAttachmentRepository>().Use<AttachmentDB>();
}
);
}
puis utiliser des tests ObjectFactory.GetInstance() ou comment je fais ça?
Je suis d'accord avec ça, mais si j'ai une classe qui consomme plusieurs instances, tout ce que je voudrais échange en utilisant DI est dit DAL à utiliser dans le référentiel de mémoire. Si mon constructeur prend 10 interfaces alors je dois fournir 10 instances manuellement en utilisant DI, le tout fait automatiquement. Même si je devais créer une composition de 10 interfaces en une, j'ai encore besoin de me moquer d'une certaine manière ... –
@PawelCioch Si votre constructeur prend dix dépendances, c'est [probablement en faire trop] (http://stackoverflow.com/a/2420245/126014). Non seulement c'est une odeur de design, mais il est également probable qu'il sera difficile à tester, ou du moins à maintenir les tests. –
Je suppose que je dois changer le travail pour travailler avec des projets plus simples :). La classe qui prend tous ces derniers est le service final pour l'application de console qui a besoin de toutes sortes de référentiels et de filtres. Probablement pourrait re-factoriser mais les algorithmes sont tellement interconnectés qu'il est difficile d'isoler l'unité de travail. En tout cas merci pour vos commentaires. –