2013-03-30 55 views
2

我閱讀了關於Java斷言的Oracle建議,並且還說您也應該使用assert作爲公共後置條件, (http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html#postconditions)。如何結合Java斷言和(JUnit)公共後置測試?

我該如何將這個斷言與自動化測試結合起來,實際上也檢查了這一點?

例如: 調用類「堆棧」的「推」方法後,您想要檢查堆棧現在是否爲空。你可以使用斷言,你可以使用測試。

有沒有什麼最佳做法,我可以做這兩個和單元測試更多的檢查,但無論如何,我會做兩次事情,這似乎並不好。

我已經看過這些問題:

https://softwareengineering.stackexchange.com/questions/18288/are-asserts-or-unit-tests-more-important

assert vs. JUnit Assertions

+0

依託'assert'是脆弱的,問題僅在運行時發現的。 – assylias

回答

3

編寫斷言這一決定是實現選擇。
決定運行啓用了斷言的JVM是運行時的選擇。

JUnit測試應測試行爲,而不考慮實現或運行時選擇。

要清楚,答案是您的JUnit測試應該(通過代碼)斷言該方法具有預期的結果。如果斷言是在有效地做同樣的事情的代碼,這是不相關的,但不應被視爲一個理由不寫相應的JUnit測試的依據,這是因爲:

  • 編碼實施的人是很隨意刪除斷言語句
  • 的JVM可能不會(曾經)與斷言運行打開
+1

所以我應該接受,我可以編寫一些檢查兩次? –

+0

我相信這是最明智的,是的 - 出於我在答案中陳述的理由 – Bohemian