使用 IOC 配置单元测试和集成测试



我有一个单元测试项目,它使用 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>();
    }
}

这是基本思想。

最新更新