单元测试断言失败错误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)
你能给我解释一下吗? 谢谢
# 1 楼答案
理论上,只需在{}中实现{}就可以使您的测试用例作为基于{}中{}的{}断言通过。但是只实施{}而不实施{}将导致{a1}2的紫色化,如下所述-
# 2 楼答案
使用assertEquals时,它会尝试使用equals()方法比较两个对象。如果尚未重写类中对象类中的equals()方法,则它将使用对象类中的默认equals()方法,其实现如下所示:
正如您所看到的,这里它只是比较对象引用,因为在您的案例中两个对象有两个不同的引用,所以断言失败,所以您需要在RegionWithActivities类中实现equals()方法,作为重写equals()的最佳实践,您还应该重写hashcode()方法,但是你的断言没有必要通过