2015-07-20 87 views
6

我目前正試圖弄清楚如何編寫適當的單元測試。還有很多東西需要學習。我想詢問的一種情況如下:調用不受測試的方法?

假設我正在測試類X的方法A。現在我經常發現有必要調用不屬於當前測試的方法B(的X)。大多數情況下,這會發生在建立測試夾具(即改變X的狀態)或斷言A(即關於X的狀態斷言)。在這兩種情況下,嘲笑都是徒勞的。但是,如果我對B進行了任何(錯誤)更改,則即使A沒有任何更改,測試A也可能會失敗。

現在,我不確定如何解釋這個結果。這是否意味着我的測試過程或設計是有缺陷的,還是不是問題,因爲我畢竟測試了單元「X」(該課程)?

+2

如果您在'B'中更改了代碼,並且'A'的測試失敗了,它仍然會告訴您您破壞了某些內容**。它還會告訴你哪個測試失敗。既然你知道你改變了什麼,除非你不想在開發過程中每次運行完整的測試套件,否則哪個測試可以幫助你識別它並不重要。我相信嘲笑只有在你有像數據庫或web服務這樣的外部依賴時纔有意義。 – simbabque

+0

對於我來說,這個問題太抽象了,我有一個強烈的觀點,但對我來說,底線是如果測試可以幫助您找到或防止代碼中的錯誤而不會造成維護滋擾,那麼這是一個很好的測試。 –

回答

5

如果A測試失敗的原因是因爲類X的對象由於B問題而處於無效狀態,所以測試設計不一定存在任何問題。真的,你應該有一些B的單元測試,在你進行測試A之前,它就會失敗。這樣,您可以假設如果這些測試通過,A的任何測試失敗都是A存在問題的結果。

編寫單元測試的典型方法是假定每個未經測試的方法都能正常工作。不過,如果這些其他方法有自己的單元測試以在引入錯誤時捕獲錯誤,那麼這是唯一有用的。但是,如果您沒有這個功能,那麼由於您最近在B中引入了一個錯誤而導致您的測試用例A失敗,可能會導致您發現錯誤的樹。

+0

「編寫單元測試的典型方法是假定每個未經測試的方法都能正常工作。」 - 我正在尋找的信息。非常感謝! –

+3

@AndyBrandi不要忽略下一句話!這很關鍵! – Daniel