2011-09-01 145 views
2

我正在嘗試爲一個方法編寫一個單元測試,該方法將一個字符串作爲參數 米,並在格式不正確時引發異常(如果沒有問題,則爲NONE) 。 我想編寫一個參數化測試,它提供幾個字符串和 預期的異常(包括如果輸入 字符串格式正確,則不會引發任何錯誤!)。如果試圖使用@Test(期望值= SomeException.class) 註釋,我遇到了兩個問題:在參數化JUnit 4+測試中對可選異常進行測試

  1. 期待= NULL是不允許的。 那麼我怎麼能測試沒有例外的預期結果 (對於格式良好的輸入字符串)呢?

  2. expect = not possible? 我還沒有嘗試過,但我強烈懷疑這是 閱讀本文後的情況(請問您是否確實如此?): http://tech.groups.yahoo.com/group/junit/message/19383 這似乎是我找到的最佳解決方案。你怎麼看待 它,尤其是相比: How do I test exceptions in a parameterized test?

預先感謝您的幫助,我期待着討論:)

回答

1

有兩個不同的測試 - 一個有效輸入一個用於無效的。我沒有使用JUnit 4,所以我不能評論確切的註釋格式 - 但基本上你會有一個參數化測試與各種不同的無效輸入,它說它確實期望一個例外,並單獨測試各種不同的有效的輸入,它沒有說任何關於異常的東西。如果在您的測試沒有說明應該出現異常時,測試將失敗。

5

創建兩個測試用例類:

  • ValidStringsTest
  • InvalidStringsTest

顯然,第一個測試的有效投入各種(未拋出異常),而第二個總是期望例外。

記住:測試的可讀性比生產代碼的可讀性更重要。不要在JUnit測試用例中使用古怪的標誌,條件和邏輯。簡單是國王。

另請參閱我的回答here瞭解如何幹淨地測試異常。

0

將測試用例拆分爲兩個測試類是許多情況下的適當方法 - 正如Tomasz和Jon所述。

但也有其他情況下,這種拆分不僅僅是可讀性方面的不錯選擇。假設測試數據集中的行具有自然順序,並且如果行按照自然順序排序,則可以很容易地看到測試數據是否涵蓋所有相關用例。如果將測試用例分成兩個測試類,則不再有一種簡單的方法來查看是否涵蓋了所有相關的測試用例。對於這些情況, How do I test exceptions in a parameterized test? 確實提供了最佳解決方案。