我正在使用Nunit,我不知道是否有辦法返回到真正的初始化狀態,包括所有已經構建的單例。如何返回到幾個測試執行之間的系統初始狀態
目前我已經解決了它與一個解決方法添加到單身重置方法,我不喜歡它,因爲現在我的生產代碼不乾淨。
據我所知,單音將被初始化一次並保存在所有測試執行期間可用的堆中。
有沒有辦法在Nunit testfixture的拆解函數中清理堆?
我已經成功地再現與以下(醜陋的)的代碼示例的問題,你可以看到,當兩個測試執行一前一後的第二個失敗...
[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;
}
}
到anwser是否有可能提供樣品測試類進行了再現的問題?很難說明您正在嘗試做什麼 – nozzleman
是否可以重新啓動測試中的程序或重新初始化整個組件? 關於在單元測試中使用單例發生的問題的討論可以在這裏找到:http://stackoverflow.com/questions/3876951/why-is-it-hard-to-unit-test-a-system-that -depends-on-singletons – JoeFox