0

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

有没有办法用 Visual Studio 2012 做到这一点,或者是否有其他测试框架,除了 MSTest,它允许这种类型的配置?

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

谢谢托德

4

2 回答 2

1

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

让我换一种说法。当测试完全相同时,您为什么有兴趣在使用和不使用数据库的情况下进行相同的测试。只需将数据库留在其中并进行测试即可。除了这些测试之外,您还可以添加“真正的”单元测试,其范围要小得多。

于 2012-09-21T11:40:44.497 回答
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>();
    }
}

这是基本思想。

于 2014-10-08T03:50:16.590 回答