我有一个单元测试项目,它使用 Ninject 来模拟数据库存储库。我想使用这些相同的测试作为集成测试,并使用 Ninject 将我的真实数据库存储库绑定回它们各自的实现,以便在数据库中测试/强调应用程序。
有没有办法用 Visual Studio 2012 做到这一点,或者是否有其他测试框架,除了 MSTest,它允许这种类型的配置?
我真的很讨厌将这些单元测试重写/复制到集成测试项目中,但我怀疑我可以将文件作为链接复制,并将单个测试文件编译到两个项目(单元和集成)中。
谢谢托德
我有一个单元测试项目,它使用 Ninject 来模拟数据库存储库。我想使用这些相同的测试作为集成测试,并使用 Ninject 将我的真实数据库存储库绑定回它们各自的实现,以便在数据库中测试/强调应用程序。
有没有办法用 Visual Studio 2012 做到这一点,或者是否有其他测试框架,除了 MSTest,它允许这种类型的配置?
我真的很讨厌将这些单元测试重写/复制到集成测试项目中,但我怀疑我可以将文件作为链接复制,并将单个测试文件编译到两个项目(单元和集成)中。
谢谢托德
你的要求对我来说听起来很奇怪。单元测试和集成测试之间的区别远不止是否连接到数据库。集成测试要么具有更大的范围,要么测试组件是否正确通信。当您编写单元测试时,这样的单元的范围通常很小(一个类/组件,所有依赖项都被模拟出来),这意味着不需要使用 DI 容器。
让我换一种说法。当测试完全相同时,您为什么有兴趣在使用和不使用数据库的情况下进行相同的测试。只需将数据库留在其中并进行测试即可。除了这些测试之外,您还可以添加“真正的”单元测试,其范围要小得多。
使用 Nunit,您可以使用 TestCase 做到这一点,
假设您需要使用 CustomerRepository 和 OrderRepository 使用单元和单元/集成测试,
[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>();
}
}
这是基本思想。