0

我正在使用 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;
    }
}
4

1 回答 1

-1

单元测试向您展示了非常有用的东西:static代码中的字段是邪恶的。now my production code is not clean=> 它不干净,因为静电。如果您想引入单调,请使用您使用的 DI 框架,或者不使用 DI 框架,但使用 IoC。

有关更多信息,请从此处转到 anwser Dependency Injection & Singleton Design pattern

于 2016-11-29T10:15:48.287 回答