一些上下文第一:我正在一個mutation testing tool for C# + NUnit,和用於速度的緣故我 使用內部類的NUnit 2.6.4核心組件( RemoteTestRunner)至run tests(請參閱底部的DoTests
方法)放在單獨的AppDomain中。無限循環使用RemoteTestRunner當與最優化的單元測試代碼
問題: 我有一個單元測試,輪詢變量,直到它變爲非空。這個變量是一個字典賦值爲空,然後通過定時器觸發的動作重新分配給一個真正的字典。當用代碼優化構建測試程序集時,它永遠不會結束。有問題的代碼:
[Test]
public void WeirdOne()
{
using (var accumulator = new Accumulator<string>(5, TimeSpan.FromMilliseconds(500)))
{
Dictionary<int, string> pack = null;
accumulator.NewPack += p => pack = p;
accumulator.Add("D");
accumulator.Add("A");
accumulator.Add("M");
accumulator.Add("N");
while (pack == null) ;
Assert.That(pack.Count, Is.EqualTo(4));
}
}
Here如果需要,可以使用Accumulator實現。
我發現:
- 如果我把
while
環(帶Thread.Sleep
和WriteLine
測試)裏面的東西,那我也沒在運行測試結束 - 更多問題如果我通過
Accumulator.Add
方法觸發NewPack
動作,測試進行到底 - 只是爲了確保定時器能夠有效地完成工作,我試圖添加一個
File.Create()
之前致電NewPack
行動。該文件被創建,有或無代碼優化 - 沒有問題時,啓動與NUnit控制檯(2.6.2/2.6.4),有或沒有優化
因爲NUnit的可以啓動這個並進入最後,我懷疑我在實例化所有RemoteTestRunnner的環境時丟失了一些東西。
有沒有人遇到過這種調試/發佈構建問題?任何關於我失蹤的主角?
感謝您的閱讀!
編輯:正如指出的阿列克謝L.
定義這個變量作爲實例字段並將其標記爲揮發性
避免無限循環,但仍然沒有一絲關於如何nunit-說出來