我有一个单元测试项目,它使用 Ninject 来模拟数据库存储库。我想使用这些相同的测试作为集成测试,并使用 Ninject 将我的真实数据库存储库绑定回各自的实现中,以便将应用程序测试/压力到数据库中。
有没有办法在Visual Studio 2012中做到这一点,或者除了MSTest之外,是否有其他测试框架允许这种类型的配置?
我真的很讨厌将这些单元测试重写/复制到集成测试项目中,但我怀疑我可以将文件作为链接复制,并将单个测试文件编译为两个项目(单元和集成)。
谢谢托德
你的要求对我来说听起来很奇怪。单元测试和集成测试之间的区别比是否连接到数据库要大得多。集成测试要么具有更大的范围,要么测试组件是否正确通信。编写单元测试时,此类单元的范围通常很小(一个类/组件模拟了所有依赖项),这意味着不需要使用 DI 容器。
让我换个说法。当测试完全相同时,您为什么有兴趣在有和没有数据库的情况下进行相同的测试。只需将数据库留在其中并进行测试即可。除了这些测试之外,您还可以添加范围小得多的"真实"单元测试。
使用 Nunit,您可以使用 TestCase 执行此操作,
假设您需要使用客户存储库和订单存储库的单元和单元/集成测试,
[TestFixture]
public class TestCustomerRepository
{
IKernel _unit;
Ikernel _integration;
[SetUp]
public void Setup()
{
//setup both kernels
}
[TestCase("Unit")]
[TestCase("Integration")]
public void DoTest(String type)
{
var custRepo = GetRepo<ICustomerRepository>(type);
var orderRepo = GetRepo<IOrderRepository>(type);
//do the test here
}
protected T GetRepo<T>(String type)
{
if (type.Equals("Unit"))
{
return _unit.Get<T>();
}
return _integration.Get<T>();
}
}
这是基本思想。