我有一个类,它定义只使用 id 属性等于。它还有另一种方法(称为“areSame”),它检查给定参数是否具有一些与此对象属性相同的重要属性(并且忽略 id)。
在测试中,我想使用 areSame as "custom equals"方法检查两个集合是否相同 (最好忽略顺序,不依赖 hashCode,这显然与 areSame 不一致)。
我在想,是否有比编写包装器更短的方法。写这样的东西会更愉快
assertThat(actualCollection,
containsInAnyOrder_butUsingCustomEquals(expectedCollection, "areSame"));
Hamcrest 的例子,在处理集合时,只使用简单的类型,虽然有可能比较像 reflectEquals 这样的对象,但我还没有想出如何组合匹配器来做我想做的事情。
我正在使用 JUnit,所以 Hamcrest 似乎是第一个快乐的,因为 JUnit 已经包含了它的一些匹配器。但由于我还没有绑定(bind)它,我想使用 AssertJ、Mockito 或其他框架的解决方案是可以接受的。
那么,这在某些测试框架中是否可行,还是我应该将其包装起来?
由于我相当长的搜索没有发现任何人甚至不成功地询问这个问题,我猜大多数人不会浪费时间苦苦思索几行,而只是编写包装器和工厂来转换集合,对吧?希望我没有用谷歌搜索...
最佳答案
assertj擅长这个,尤其是它的custom-comparison-strategy
assertThat(actual).usingElementComparator(customComparator).containsOnlyElementsOf(expectedCollection);
或者更方便(不需要用预期的元素创建一个集合)
assertThat(actual).usingElementComparator(customComparator).containsOnly(expected1, expected2);
关于java - 在 Java 测试框架中使用自定义 equals 方法断言两个集合相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40964531/