是否有一种实用的方法可以在Microsoft Unit Test Framework中针对不同的存根重用一组测试方法?

时间:2015-01-29 16:06:14

标签: c# unit-testing visual-studio-2012

我正在使用Visual Studio 2012下的Microsoft Unit Test框架来测试一个C#类,它代表某种数据库的数据访问层。

为了能够对它进行单元测试,我创建了一个类,而不是所说的数据库。 我的测试类具有以下结构:

[TestClass]
public class UnitTests {

    MyStub stub;

    [TestInitialize]
    public void InitializeContext() { // Construct stub  }

    [TestCleanup]
    public void CleanupContext() { // Dispose stub }

    [TestMethod]
    public void Test1() { ... }

    [TestMethod]
    public void Test2() { ... }

    ...
}

工作正常。

我现在想编写第二个测试类,它针对不同的存根执行相同的测试,因此我想重用代码,但我无法通过继承实现这一点(继承UnitTests并覆盖InitializeContext()CleanupContext()),因为TestMethod属性似乎不可继承。

有没有实用的方法来实现这一目标?如果是这样,哪一个?

1 个答案:

答案 0 :(得分:0)

对我而言,您似乎拥有一组属于您希望在不同环境中运行的“测试集”的测试。

我个人通过在实际测试之外实施测试来解决这个问题,并使用参数调用外部实现的测试:

[TestClass]
public class UnitTests1 {

    MyStub stub;

    [TestInitialize]
    public void InitializeContext() { // Construct stub  }

    [TestCleanup]
    public void CleanupContext() { // Dispose stub }

    [TestMethod]
    public void Test1() { StubTests.TestMyStub(stub); }

    [TestMethod]
    public void Test2() { StubTests.TestMyStub2(stub); }

    ...
}


[TestClass]
public class UnitTests2 {

    MyStub stub;

    [TestInitialize]
    public void InitializeContext() { // Construct stub  }

    [TestCleanup]
    public void CleanupContext() { // Dispose stub }

    [TestMethod]
    public void Test1() { StubTests.TestMyStub(stub); }

    [TestMethod]
    public void Test2() { StubTests.TestMyStub2(stub); }

    ...
}

“StubTests”类不使用任何注释,并使用函数中的参数引用外部依赖项(例如,移交存根)。