[英]What is the difference between the methods in Assert and the Assertions packages in junit 5?
[英]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.