我必须使用xUnit为现有代码编写测试。这是我面临的一个简化问题:
using Xunit;
namespace XUnitTestProject1
{
public class UnitTest1
{
[Fact]
public void Test1()
{
GlobalHanler.StaticProperty = "some value";
}
[Fact]
public void Test2()
{
Assert.Null(GlobalHanler.StaticProperty);
}
}
public static class GlobalHanler
{
public static string StaticProperty;
}
}
GlobalHandler拥有另一个对象,它们都是静态的
[我一起运行2个测试时,Test2
失败,因为它可以看到在Test1
中设置的值。但是,当我单独运行Test2
时,它会成功。
我的目标是让两个测试一起运行时通过。我需要以某种方式分别重置每个测试的全局静态属性,但是我无法更改GlobalHandler
在每个测试方法中设置StaticProperty
似乎不是一种选择,因为它将影响并行运行的其他测试
为了拥有可测试的代码,您应该首先将逻辑放在可以根据需要创建多次的类中,然后通过传递引用在代码中使用该类。
您的生产代码始终可以使用单例,但是由于没有直接引用该单例,因此可以测试。
由于可能的副作用和不清楚的依赖关系,单例和测试不能很好地共存。