簡體   English   中英

assertEquals(Long,Integer)是否可以成功?

[英]Can assertEquals(Long,Integer) succeed?

當前,我正在做一些代碼審查,發現這行代碼中斷了測試用例:

assertEquals(Long.valueOf(4321), lMessage.getNumber());

getNumber返回一個也是4321Integer 我將其更改為:

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.

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