2010-11-22 97 views
2

在我的測試中,我想啓動2個線程,並檢查每個線程執行結束時的一些斷言條件。MSTest:斷言線程執行

在這種情況下實施測試的最佳實踐是什麼?我明白,在兩個線程啓動之後,我需要等待他們完成...是否有任何現成的解決方案,或者我需要「手動」執行該操作(例如,在測試結束時,我可以等待2事件中的每一個都由一個線程來建立)。

請指教,謝謝!

回答

1

你應該小心運行多線程單元測試。這可能會使他們不太可靠。它更適合集成測試。但是,如果你真的想,你可以在這兩個線程調用Join

Thread t1 = ...; 
Thread t2 = ...; 

t1.Start(); 
t2.Start(); 

// Wait for threads to finish: 
t1.Join(); 
t2.Join(); 
1

爲什麼不使用你的兩個線程的方法Join

2

如果您使用的是.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 

爲斷言失敗應該運行測試的線程上發生,而不是產生的線程斷言條件線程測試已運行後,這一點很重要。生成的線程(即非測試線程)的異常將被視爲未處理的異常,而不是「測試」斷言異常。