在我的測試中,我想啓動2個線程,並檢查每個線程執行結束時的一些斷言條件。MSTest:斷言線程執行
在這種情況下實施測試的最佳實踐是什麼?我明白,在兩個線程啓動之後,我需要等待他們完成...是否有任何現成的解決方案,或者我需要「手動」執行該操作(例如,在測試結束時,我可以等待2事件中的每一個都由一個線程來建立)。
請指教,謝謝!
在我的測試中,我想啓動2個線程,並檢查每個線程執行結束時的一些斷言條件。MSTest:斷言線程執行
在這種情況下實施測試的最佳實踐是什麼?我明白,在兩個線程啓動之後,我需要等待他們完成...是否有任何現成的解決方案,或者我需要「手動」執行該操作(例如,在測試結束時,我可以等待2事件中的每一個都由一個線程來建立)。
請指教,謝謝!
你應該小心運行多線程單元測試。這可能會使他們不太可靠。它更適合集成測試。但是,如果你真的想,你可以在這兩個線程調用Join
:
Thread t1 = ...;
Thread t2 = ...;
t1.Start();
t2.Start();
// Wait for threads to finish:
t1.Join();
t2.Join();
爲什麼不使用你的兩個線程的方法Join?
如果您使用的是.NET 4,你可以用任務來完成在不同的線程上運行測試。以下將:
例子:
Action test1 =() => { /* Test code 1 */};
Action test2 =() => { /* Test code 2 */};
Task task2 = null;
Task task1 = new Task(() =>
{
task2 = new Task(test2);
task2.Start();
test1();
});
task1.Start();
task1.Wait();
task2.Wait();
//Assert test 1
//Assert test 2
爲斷言失敗應該運行測試的線程上發生,而不是產生的線程斷言條件線程測試已運行後,這一點很重要。生成的線程(即非測試線程)的異常將被視爲未處理的異常,而不是「測試」斷言異常。