2013-06-30 28 views
1

我正在接管C#中的遺留代碼,並且單元此代碼的測試不起作用。應該在沒有TestMethod屬性的方法中使用Assert嗎?

讓我來解釋下面的代碼。

[TestMethod] 
public void SampleTest() { 
    ... 
    // Parallel call of this method via Threading 
    TestUtil(args); 
    ... 
} 

private void TestUtil(...) { 
    ... 
    Assert.IsTrue(Condition1); 
    Assert.IsTrue(Condition2); 
} 

當我在Visual Studio中運行SampleTest,而不是標誌着測試爲失敗(因爲一些條件失敗),VS拋出QTAgent.exe異常。

你知道爲什麼QTAgent.exe在這種情況下崩潰,而不是失敗的測試?

+0

如果你調用的函數是單元測試的一部分,那麼你不應該使用'TestMethod'屬性。那些通常被測試自動化觸發來運行所有的單元測試,你不希望TestUtil單獨運行,所以不要,不要使用'[TestMethod]'屬性。在調用私有函數的Test方法範圍內繼續使用Assert是很好的。 –

回答

2

我認爲將斷言放入測試類中的私有方法是完全正確的。 私有方法基本上可以看作邏輯上屬於主要方法的代碼,但是爲了可讀性或代碼重用已經展開了。 如果在多次測試中斷言相同,我通常會將私人方法置於斷言狀態

+0

我相信這是把私人方法放置斷言很好。也許是因爲線程導致QTAgent.exe崩潰而不是通過測試失敗?你知道發生了什麼和/或爲什麼? – zer0ne

0

我找到了答案。它與Assert或TestMethod或線程無關。由於缺少庫,引發了異常。

因此,如果可能的話,我想刪除這個問題。

相關問題