java - 单元测试 - 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() 方法,但你的断言没有必要通过。
推荐阅读
- php - 如何从数据库中专门调用表属性?
- java - Hibernate - 单个实体上的多个映射
- javascript - Firefox 的自定义滚动条样式
- r - 如何使用 R 发送搜索词并从网站检索信息
- google-cloud-platform - Stackdriver 日志 - 获取统计信息
- machine-learning - 如何使用机器学习预测每天特定事件的发生时间?
- python - 特定纪元后回调活动 Keras
- node.js - 使用 Express (React+Node+Express) 进行 React 脚本访问管理
- angular - Typescript + pouchdb 远程登录不是函数
- jquery - jquery通过分配给单个元素的命名空间取消绑定多个事件