[英]Can assertEquals(Long,Integer) succeed?
當前,我正在做一些代碼審查,發現這行代碼中斷了測試用例:
assertEquals(Long.valueOf(4321), lMessage.getNumber());
getNumber
返回一個也是4321
的Integer
。 我將其更改為:
assertTrue(4321 == lSavedStoerung.getMessage());
因為根據我對equals方法的理解, assertEquals
在第一個示例中永遠不會返回true。 使用我的assertTrue
所有測試用例都運行良好。
還是我理解不對?
assertEquals
測試失敗的原因是,相等性不僅考慮數字的值,還考慮其類型。 java.lang.Long
對象不equal
java.lang.Integer
。
由於lMessage.getNumber()
返回一個int
,因此Java在傳遞給assertEquals
之前將其包裝為Integer
。 這就是為什么您可以使用Integer.valueOf
來修復測試用例的原因:
assertEquals(Integer.valueOf(4321), lMessage.getNumber());
4321過長的原因是什么? 如果沒有必要,請使用整數解決方案dasblinkenlight sugested。
assertEquals(Integer.valueOf(4321), lMessage.getNumber());
要么
assertEquals(4321, lMessage.getNumber());
另一方面,如果您的代碼允許lMessage.getNumber()
根據情況返回長lMessage.getNumber()
,則可以將其lMessage.getNumber()
以進行測試。
assertEquals(Long.valueOf(4321), (long) lMessage.getNumber());
PS:使用assertTrue&==過於自在時,如果您比較原始數據類型中未包含的內容,則會給您帶來麻煩,但在此特定示例中不會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.