簡體   English   中英

斷言與JUnit斷言

[英]assert vs. JUnit Assertions

今天我看到了一個帶有java斷言而不是JUnit斷言的JUnit測試用例 - 是否有優勢或缺點優先於另一個?

在JUnit4中,JUnit斷言拋出的異常(實際上是Error)與java assert關鍵字(AssertionError)拋出的異常相同,所以它與assertTrue完全相同,而不是堆棧跟蹤,你無法區分它們。

話雖如此,斷言必須在JVM中使用特殊標志運行,導致許多測試似乎只是因為有人在JUnit測試運行時忘記用該標志配置系統 - 不好。

一般來說,正因為如此,我認為使用JUnit assertTrue是更好的做法,因為它保證測試運行,確保一致性(你有時使用assertThat或其他不是java關鍵字的斷言)以及如果JUnit斷言將來應該更改(例如掛鈎到某種過濾器或其他未來的JUnit功能),您的代碼將能夠利用它。

java中assert關鍵字的真正目的是能夠在沒有運行時懲罰的情況下關閉它。 這不適用於單元測試。

我更喜歡JUnit斷言,因為它們提供比內置assert語句更豐富的API,更重要的是不需要像assert那樣顯式啟用,這需要-ea JVM參數。

當測試失敗時,您會獲得更多信息。

assertEquals(1, 2); 結果在java.lang.AssertionError: expected:<1> but was:<2>

VS

assert(1 == 2); 導致java.lang.AssertionError

如果將消息參數添加到assertEquals則可以獲得更多信息

我會說在測試用例中使用JUnit斷言,並在代碼中使用java的斷言。 換句話說,真正的代碼永遠不會有JUnit依賴,很明顯,如果它是一個測試,它應該使用它的JUnit變體,而不是斷言。

我會說如果你使用的是JUnit,你應該使用JUnit斷言。 assertTrue()assert基本相同,否則為什么甚至使用JUnit?

如果您專門使用閃亮和新的東西,這可能不適用,但斷言直到1.4SE才引入Java。 因此,如果您必須在具有較舊技術的環境中工作,則出於兼容性原因,您可能傾向於使用JUnit。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM