2010-08-31 46 views
5

每個測試有多個斷言是否真的很難聞?我通常嘗試遵循「安排,行動,斷言」模式以及每個測試指南的單個斷言。我認爲乾淨,小型,孤立的測試純粹是令人敬畏的。大多數情況下,我設法做到這一點。然而,有時候我發現我自己聲稱「前提條件」之後就像這樣排列:在單元測試中聲明設置和預置條件

'arrange: 
'pre-conditions:  
    Assert the arrange worked 
'act: 
'assert: 

我的測試測試是否過多?它關心的是它不應該關心的事情嗎?我很想聽聽這方面的一些意見。

+0

可能的重複[在單元測試中是否存在多於Assert的錯誤練習?](http://stackoverflow.com/questions/762512/is-it-bad-practice-to-have-more-than -a-unit-test) – 2010-08-31 12:54:21

+1

如果從驗證測試夾具設置與使用多個斷言來驗證結果的角度來看,我不認爲這是重複的。重新命名問題以反映這一點可能會有所幫助。 – Jay 2010-08-31 13:31:36

+0

我將重新命名以反映該建議。 @Carl Manaster:真棒鬍子夥計! – Buzzer 2010-08-31 14:54:37

回答

3

正如我所說here,我想也許我們最好的做法應該是,沒有安排-ACT-斷言,而是Arrange- 假設 -act斷言。在代理之前,我們斷言該行動的預期結果尚未生效。這不是,正好與你所要求的相同;一般來說,我認爲驗證設置並不重要,因爲設置錯誤在任何情況下都傾向於表現得非常「大聲」;但是在測試中有第二個斷言是一個很好的理由。

1

我認爲必須使用Assert來驗證設置是不理想的,因爲它會使結果混淆(如果只是查看輸出,可能很難弄清楚您正在測試的內容)。

我認識到有時候這是必要的,或者你只是想確保一切都按照你打算的方式進行測試。

我的做法是使用Debug.Assert(在C#中)用於此目的,以便安裝驗證不會成爲測試輸出的一部分。

如果安裝程序沒有將系統置於預期狀態,則可以通過拋出異常來實現其他語言中的相同功能。

不同的測試跑步者可能會有不同的處理方式,因此您應確保此方法具有預期的效果(測試失敗,但只要Debug.Assert通過或沒有異常拋出,不會有額外的報告輸出)。

+0

所有這些都是很好的答案。但是,我選擇了Jay's,因爲我喜歡Debug.Assert在測試中的讀取方式。再次感謝。 – Buzzer 2010-09-23 15:34:03

1

我不會使用香草「斷言」,而是Assert.Inconclusive(MSTest)¹。測試沒有失敗,所以你不想失敗測試運行。

1)Assume在JUnit和NUnit我相信。

+0

鏈接到[Assert.Inconclusive](http://msdn.microsoft.com/en-us/library/ms243750.aspx) – 2014-11-11 19:10:37

+0

謝謝Derek,更新了答案。 – 2014-11-13 15:14:03