私は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;
}
}