2012-01-08 13 views
0

這是我的單元測試問題之一。帶存根的單元測試類。我應該配置存根以返回正確的值嗎?

我正在閱讀單元測試的藝術,並在第3章作者顯示如何刪除一個或多個類之間的依賴關係。這似乎很明顯。不完全清楚的是以下幾點。

當我使用存根配置測試方法時,我將其配置爲返回特定值。然後,我調用被測試類暴露的測試方法。該方法執行一些邏輯並使用存根的返回值。問題是:如果存根配置爲返回錯誤的值,那麼我的測試可能會失敗。

所以問題是:當我使用存根時,我應該總是將它們配置爲返回預期值嗎?在我的意見中,這應該是測試的正確方法,就好像存根返回始終是期望值一樣,我確定只測試被測方法內部的邏輯。

您對此有何看法?是否存在某種意義要求存根返回不正確的值?

非常感謝, 馬爾科

回答

2

您正在測試的SUT(待測系統)如何將幾個條件下工作:

  • 好路徑=配置存根返回良好值和試驗的SUT相應的行爲
  • 傷心路徑(s)=配置存根錯誤的值,並驗證該值可以處理這種情況下(例如,如果您使用nUnit,您可以測試它使用ExpectedException屬性拋出異常)
+0

哦,這就是我喜歡接受的答案!非常感謝! – Marconline 2012-01-08 12:59:48

+0

我還有另一個問題:假設我有一個存根,如果文件有'ext'擴展名則返回True,否則返回false。我的被​​測方法調用了有效擴展的方法,但存根被配置爲返回false(即我們正在測試一個悲傷的路徑)。我該怎麼做才能改進我的方法並讓測試通過?我看到的唯一解決方案是不相信存根,但是...這是正確的嗎? – Marconline 2012-01-08 13:27:55

+0

根據擴展名(我們稱之爲ExtensionValidator)返回true/false的類是另一個系統組件。這個邏輯將在別處測試(在ExtensionValidatorTests中)。在我們當前的環境中,我們正在測試sut,現在ExtensionValidator只是一個存根,它會返回我們告訴它返回的任何值。所以,根據擴展邏輯的真/假不需要在我們當前的上下文中進行測試。請讓我知道這是否回答你的問題。 – GolfWolf 2012-01-08 14:17:50

1

您可以配置存根方法返回根據在某些情況下的測試設置值。在其他人返回默認值,這應該是有效的。

相關問題