我们有一个带有几个字段的自定义类,由于业务领域的原因,我们不能覆盖它们的equals/hashcode方法
不过,在单元测试期间,我们应该断言集合中是否包含此类的项目
List<CustomClass> customObjectList = classUnderTest.methodUnderTest();
//create customObject with fields set to the very same values as one of the elements in customObjectList
//we should assert here that customObjectList contains customObject
但是,到目前为止,我们没有找到任何在不覆盖equals/hashcode的情况下可行的解决方案,例如哈姆克雷斯特
assertThat(customObjectList, contains(customObject));
导致AssertionError引用
Expected: iterable containing [<CustomClass@578486a3>]
but: item 0: was <CustomClass@551aa95a>
是否有解决方案,而不必逐场比较?
最佳答案
如果您使用的是Java8,则可以使用Stream#anyMatch和您自己的customEquals方法。这样的事情会起作用-
assertTrue(customObjectList.stream()
.anyMatch(object -> customEquals(object,customObject)));
更新了以反射(reflect)Holger的评论