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

时间:2012-09-19 23:43:05

标签: unit-testing inversion-of-control integration-testing mstest

我有一个单元测试项目,它使用Ninject来模拟数据库存储库。我想使用这些相同的测试作为集成测试,并使用Ninject将我的真实数据库存储库绑定回各自的实现,以便测试/强调应用程序进入数据库。

有没有办法在Visual Studio 2012中执行此操作,还是有其他测试框架,而不是MSTest,它允许这种类型的配置?

我真的很讨厌将这些单元测试重写/复制到集成测试项目中,但我怀疑我可以将这些文件作为链接复制并将一个测试文件编译成两个项目(单元和集成)。

由于 托德

2 个答案:

答案 0 :(得分:1)

你的要求对我来说听起来很奇怪。单元测试和集成测试之间的区别远远大于仅连接到数据库。集成测试要么具有更大的范围,要么测试组件是否正确通信。编写单元测试时,这样一个单元的范围通常很小(一个类/组件,所有依赖项都被模拟掉),这意味着不需要使用DI容器。

让我说的不同。当测试完全相同时,为什么有兴趣使用和不使用数据库进行相同的测试。只需保留数据库,然后测试即可。除了这些测试之外,您还可以添加“实际”单元测试,其范围要小得多。

答案 1 :(得分:0)

使用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>();
    }
}

这是基本的想法。