使用有界DbContexts进行集成测试
本文关键字:集成测试 DbContexts | 更新日期: 2023-09-27 18:15:56
我在应用程序中使用多个DbContext
(有界DbContext
)。所以我有以下代码:
public class EfUnitOfWork<TContext> : IUnitOfWork where TContext : BaseDbContext, new()
{
...
}
//*******************************Module1**************************************
public interface IModule1UnitOfWork:IUnitOfWork
{
}
public class Module1EfUnitOfWork : EfUnitOfWork<Module1DbContext>,IModule1UnitOfWork
{
public Module1EfUnitOfWork ()
: base(new Module1DbContext())
{
}
}
public class Module1DbContext: BaseDbContext
{
static Module1DbContext()
{
Database.SetInitializer<Module1DbContext>(null);
}
public Module1DbContext()
: base("name=MyDatabase")
{
}
}
//*******************************Module2**************************************
public interface IModule2UnitOfWork:IUnitOfWork
{
}
public class Module2EfUnitOfWork : EfUnitOfWork<Module2DbContext>,IModule2UnitOfWork
{
public Module2DbContext()
: base(new PlanningDbContext())
{
}
}
public class Module2DbContext: BaseDbContext
{
static Module2DbContext()
{
Database.SetInitializer<Module2DbContext>(null);
}
public Module1DbContext()
: base("name=MyDatabase")
{
}
}
我使用StructureMap 3
作为我的IoC container
,并使用以下代码:
ObjectFactory.Configure(x =>x.For(typeof(IModule1UnitOfWork))
.Use(typeof(Module1EfUnitOfWork))
.SetLifecycleTo((Lifecycles.Singleton));
x.For(typeof(IUnitOfWork))
.Use(typeof(Module1EfUnitOfWork))
.SetLifecycleTo((Lifecycles.Singleton)));
ObjectFactory.Configure(x =>x.For(typeof(IModule2UnitOfWork))
.Use(typeof(Module2EfUnitOfWork))
.SetLifecycleTo((Lifecycles.Singleton));
x.For(typeof(IUnitOfWork))
.Use(typeof(Module2EfUnitOfWork))
.SetLifecycleTo((Lifecycles.Singleton)));
它工作得很好,但是当我想使用这些代码的Integration Test
,我有一个问题。我想使用Sql Server CE
为我的Integration Test
,所以我必须通过我的测试的ConnectionString
(指定Sql Server CE
数据库文件)到模块的DbContext
s,我使用我的模块的DbContexts
作为EfUnitOfWork<>
类的通用参数,所以它应该有无参数构造函数,但正如你所看到的,我使用我的模块的DbContext无参数构造函数来指定我的数据库:
public Module1DbContext()
: base("name=MyDatabase");
不能传递任何信息给它。
那么,我如何将现有的DbContext
s用于Integration Test
呢?
"name="只指定一个连接字符串,所以它是从app.config文件中读取的间接参数。
所以我认为,你应该在测试中使用不同的app.config。