"共享"使用基类继承在MSTest中进行测试设置(ClassInitialize)

时间:2017-02-22 16:31:58

标签: c# unit-testing mstest

在执行我的测试套件时遇到问题(使用ReSharper),当多个测试类一起运行时,它看起来好像是静态结果集碰撞,而不是单独运行的问题。结构,实质上与此类似:

public class TestBase
{
    protected static Sum Target;

    protected static void Init(int a, int b)
    {
        Target = new Sum(a, b);
    }
}

[TestClass]
public class TestClass1 : TestBase
{
    [ClassInitialize]
    public static void Setup(TestContext context) { Init(1, 2); }

    [TestMethod]
    public void Test()
    {
        Assert.AreEqual(3, Target.Result);
    }      
    ... // plus around 20 tests
}

[TestClass]
public class TestClass2 : TestBase
{
    [ClassInitialize]
    public static void Setup(TestContext context) { Init(3, 4); }

    [TestMethod]
    public void Test()
    {
        Assert.AreEqual(7, Target.Result);  // failed. Expected:<7>. Actual:<3>
    }
    ... // plus around 20 tests
}

据我所知,这是由于我对静态变量的使用不足,并且会对如何更好地构建这一点提出任何好的建议,假设我在每个测试类中有大约20个单元测试,并且测试设置比上面的插图更复杂。

1 个答案:

答案 0 :(得分:1)

您可以通过删除static并将ClassInitialize更改为TestInitialize来轻松解决此问题。

public class TestBase
{
    protected Sum Target;

    protected void Init(int a, int b)
    {
        Target = new Sum(a, b);
    }
}

删除static会使Target字段成为Test1和Test2类定义的本地字段。 将ClassInitialize更改为TestInitialize意味着在运行每个Target之前刷新TestMethod的值,而不是在首次实例化类时。