【发布时间】:2018-12-01 22:25:30
【问题描述】:
我有几个使用一些静态类的单元测试,例如:
public static class Utility
{
private static Data data;
public static void Init(Data data)
{
this.data = data;
}
public static void Process()
{
// Some actions that changes this.data (not reference, just inner Values)
}
}
public class Data
{
public List<string> Values { get; set; }
public void Add(string value)
{
Values.Add(value);
}
}
每个单元测试都会初始化 Data 实例并将其传递给 Utility:
[Fact]
public void UnitTest1()
{
var data = new Data();
data.Add("val1");
Utility.Init(data);
Utility.Process();
// check changed data instance
}
[Fact]
public void UnitTest2()
{
var data = new Data();
data.Add("another_val1");
data.Add("another_val2");
Utility.Init(data);
Utility.Process();
// check changed data instance
}
如果我分别运行每个测试,那么没有问题 - 没有失败的测试。 但是,如果我按顺序运行测试,那么其中一个单元测试会失败,因为 Utility.data 包含来自先前测试的实例(短时间内),尽管有 Utility.Init 调用。 如果我通过命令行运行测试(测试执行得非常快),那么大部分测试很可能由于同样的原因而失败。我该如何解决这个问题?
【问题讨论】:
-
由于静态实用程序的性质,所有测试都在访问共享静态资源,这可能会产生负面影响,就像已经体验过的那样。我建议将实用程序类设为实例类
标签: c# unit-testing xunit