我正在使用 Nunit,我想知道是否有办法返回到真正的初始化状态,包括已经构建的所有单例。
目前我已经通过向单例添加重置方法的解决方法解决了它,我不喜欢它,因为现在我的生产代码不干净。
据我了解,单音将被初始化一次并保存在所有测试执行期间可用的堆中。
有没有办法在 Nunit 测试装置的拆解功能处清理堆?
我已经设法使用以下(丑陋的)代码示例重现了该问题,您可以看到,当两个测试一个接一个地执行时,第二个测试失败了......
[TestFixture]
public class SingletonCleanups
{
private MySingleTonsHolder _holder;
[SetUp]
public void Setup()
{
_holder = new MySingleTonsHolder();
}
[Test]
public void DoWork_FirstExecution_SingleCalledOnce()
{
_holder.DoWork();
Assert.AreEqual(1, MySingleTonsHolder.MySingleTon.CalledCount);
}
[Test]
public void DoWork_SecondExecution_SingleCalledOnce()
{
_holder.DoWork();
Assert.AreEqual(1, MySingleTonsHolder.MySingleTon.CalledCount);
}
}
public class MySingleTonsHolder
{
public static MySingleTon MySingleTon => MySingleTon.Instance();
public void DoWork()
{
MySingleTon.Instance().CalledCount++;
}
}
public class MySingleTon
{
private static MySingleTon _instance;
public static MySingleTon Instance()
{
if (_instance==null)
{
_instance = new MySingleTon();
}
return _instance;
}
public int CalledCount { get; set; }
private MySingleTon()
{
CalledCount = 0;
}
}