我会尽量简化单元测试中遇到的问题。静态值的单元测试
我测试静态私有字段的方法。如果我运行测试,那么我必须能够预测静态场的价值。当我有一个测试,或者如果我逐个运行测试,这不是问题。比一切工作正常。
问题是,当我有一个以上的单元测试,改变静态值和运行它们。 在这种情况下,只有第一次测试才会通过,其他所有测试都会失败。
这是简化的例子:
using Xunit;
namespace My.Unit
{
public class UnitTests
{
[Fact]
public void test1()
{
var obj = new TestClass();
var res = obj.testMethod();
Assert.Equal(1, res);
}
[Fact]
public void test2()
{
var obj = new TestClass();
var res = obj.testMethod();
Assert.Equal(1, res);
}
}
public class TestClass
{
private static int staticValue = 0;
public TestClass()
{
++staticValue;
}
public int testMethod()
{
return staticValue;
}
}
}
我会从每一个单元测试期望有静态领域的新的寿命,但是这并不是如此。
这取决于您的单元测试 - ** **选手有实现它为每个测试或没有新的流程,从而新的应用程序域。无论如何,我建议重置静态变量,如果需要反射。 – HimBromBeere
引入像staticValue这样的全局变量是一个糟糕的设计。你能否将TestClass实例化为一个全局可访问的字段?更好,把它放入容器。 – qxg
如果你想测试的代码 - 不使用可变的静态变量,或配置测试跑步者或测试框架运行影响的试验顺序 – Fabio