Estoy usando StructureMap en un proyecto web para DI IOC. Funciona perfecto, pero no tengo ni idea de cómo escribir pruebas unitarias con StructureMap.Usando StructureMap con pruebas unitarias
¿Debo hacer esto en AssemblyInitialize iniciar la Configuración de StructureMap como en global.asax excepción de DataContext no utilizar LinqToSqlDataContext en vivo, pero algunos datos de la memoria de esta manera:
[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>();
}
);
}
y luego usar ObjectFactory.GetInstance() prueba o como hago esto?
estoy de acuerdo con eso, pero lo que si tengo una clase que consume varias instancias, general, sin swap usando DI es digamos DAL para usar en el repositorio de memoria. Si mi constructor toma 10 interfaces, entonces necesito proporcionar 10 instancias manualmente mientras uso DI, todo hecho automáticamente. Incluso si creara una composición de 10 interfaces en una, todavía necesito burlarla de alguna manera ... –
@PawelCioch Si su constructor toma diez dependencias, es [probablemente haciendo demasiado] (http://stackoverflow.com/a/2420245/126014). No solo es un olor de diseño, también es probable que sea difícil de probar, o al menos de mantener las pruebas. –
Creo que tengo que cambiar el trabajo para trabajar con proyectos más simples :). La clase que toma todo eso es el Servicio final para la aplicación de consola que necesita todo tipo de repositorios y filtros. Probablemente podría volver a factorizarse, pero los algoritmos están tan interconectados que es difícil aislar la unidad de trabajo. De todos modos, gracias por los comentarios. –