java - 在 Java 测试框架中使用自定义 equals 方法断言两个集合相等

标签 java testing junit

我有一个类,它定义只使用 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/

相关文章:

java - 签名 key 的算法 'SHA256withECDSA' 不等于有效的 HmacSHA* 算法名称,不能与 HS512 一起使用

java - 如何为文件分配只读权限

java - 关于 dbunit 中的列类型和为数据集创建 dtd 的混淆

java - 更新 XML 节点,但保持 XML 文件格式和注释信息不变

android - 远程调试

python - 问 : How can I store/save the results of Pylint execution?

spring - Spring Boot 和 RestAssured 中的模拟 session

java - Junit 测试用例中未知主机的 GET 请求发生 I/O 错误

java - 如何查找是否所有的assertTrue都通过了或者有人失败了?

java - Spock 使用表将列表设置为参数