0

私はNunitを使用していますが、すでに構築されたすべてのシングルトンを含む実際の初期化状態に戻る方法があるのだろうか.

現在、シングルトンにリセットメソッドを追加する回避策で解決しましたが、本番コードがクリーンではないため、気に入りません。

私が理解している限り、単一のトーンは一度初期化され、すべてのテストの実行中に利用可能なヒープに保持されます。

Nunit テストフィクスチャのティアダウン機能でヒープをきれいにする方法はありますか?

次の(醜い)コードサンプルで問題を再現することができました。両方のテストが次々に実行されたときに、2番目のテストが失敗したことがわかります...

[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。コード内のフィールドは EVIL です。now my production code is not clean=> 静電気のため、きれいではありませんでした。シングルトーンを導入したい場合は、お使いの DI フレームワークを使用するか、DI フレームワークなしで IoC を使用してください。

詳細については、ここから anwser を参照してください。依存関係の注入とシングルトンの設計パターン

于 2016-11-29T10:15:48.287 に答える