[英]Junit testing Expected exception: java.io.FileNotFoundException, junit.framework.assertionFailedError
[英]Unit Testing - AssertionFailedError - Java
我無法理解為什么這個單元測試不起作用。 我正在創建 @RegionWithActivities 的兩個實例,我認為它應該通過測試。
@Test
void testAreEqual()
{
RegionWithActivities regionWithActivities1 = new RegionWithActivities(4, regions);
RegionWithActivities regionWithActivities2 = new RegionWithActivities(4, regions);
assertEquals(regionWithActivities1, regionWithActivities2);
}
錯誤是:
org.opentest4j.AssertionFailedError: expected: com.luciaandres.analysis.RegionWithActivities@710726a3<RegionWithActivities{numberOfActivities=4, regionIds=[4DA19B2B1328127FC062FB79F6F435A5, B66FA66DA650717E0964A4E30A716DAE, C841C0BED1CCDD643955065A696EED34, F2D04F76EA1EBD6C8E3AEDD506FBA35A]}> but was: com.luciaandres.analysis.RegionWithActivities@646007f4<RegionWithActivities{numberOfActivities=4, regionIds=[4DA19B2B1328127FC062FB79F6F435A5, B66FA66DA650717E0964A4E30A716DAE, C841C0BED1CCDD643955065A696EED34, F2D04F76EA1EBD6C8E3AEDD506FBA35A]}>
Expected :RegionWithActivities{numberOfActivities=4, regionIds=[4DA19B2B1328127FC062FB79F6F435A5, B66FA66DA650717E0964A4E30A716DAE, C841C0BED1CCDD643955065A696EED34, F2D04F76EA1EBD6C8E3AEDD506FBA35A]}
Actual :RegionWithActivities{numberOfActivities=4, regionIds=[4DA19B2B1328127FC062FB79F6F435A5, B66FA66DA650717E0964A4E30A716DAE, C841C0BED1CCDD643955065A696EED34, F2D04F76EA1EBD6C8E3AEDD506FBA35A]}
at RegionWithActivitiesTest.testAreEqual(RegionWithActivitiesTest.java:29)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
你能解釋一下嗎? 謝謝!
當您使用 assertEquals 時,它會嘗試使用 equals() 方法比較兩個對象。如果您沒有在類中覆蓋 Object 類中的 equals() 方法,它將使用 Object 類中的默認 equals() 方法,其實現如下:
public boolean equals(Object obj) {
return (this == obj);
}
如您所見,這里只是比較對象引用,並且因為在您的情況下兩個對象有兩個不同的引用,所以斷言失敗,因此您需要在 RegionWithActivities 類中實現 equals() 方法,並作為重寫 equals() 時的最佳實踐),您也應該覆蓋 hashcode() 方法,但您的斷言沒有必要通過。
理論上,可以只在RegionWithActivities
實現equals
以使您的測試用例作為基於RegionWithActivities
equals()
的assertEquals
斷言通過。 但是僅實現equals()
而沒有實現hashcode()
將紫羅蘭色對象類合同2 如下所述-
hashCode 的總合約為:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.