我有一个 DTO 课程
class MyDto {
private String f1;
private String f2;
private String f3;
// constructor
// get set equals/hashCode
}
它具有equal
/hascode
对,考虑到了所有 3 个字段。
请查看测试
...
var actualList = service.getActualList(...)
assertThat(actualList, containsInAnyOrder(new MyDto("a1","","c1"), new MyDto("a2","","c2")) )
...
它失败了,因为f2
它是在数据库端生成的(所以我无法预测该字段的值)。
我想传递自定义比较器来进行特定测试的比较。 可以在 Hamcrest 中实现吗?
PS 我不想重写 equals/hashcode,因为从我的业务逻辑的角度来看它是不正确的
您可以使用
containsInAnyOrder(Matcher...)
并传递一个可变参数实例列表,Matcher
而不是列表MyDto
。您也许可以Matcher
从 Hamcrest 库中找到合适的,例如也许HasPropertyWithValue
或类似的东西。否则,编写您自己的类来实现Matcher
:您可以通过忽略 AssertJ 库中的字段来进行比较。
或者如果你仍然想使用 Hamcrest,那么根据你的意愿创建自定义比较器,然后使用