在执行我的测试套件时遇到问题(使用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个单元测试,并且测试设置比上面的插图更复杂。
答案 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
的值,而不是在首次实例化类时。