Java 将对象与自定义匹配器进行比较
嗨,我有两个要比较的对象集合,它们的类型不同,但属性相同。例子: ObjA: 和ObjB:Java 将对象与自定义匹配器进行比较,java,junit,mockito,hamcrest,Java,Junit,Mockito,Hamcrest,嗨,我有两个要比较的对象集合,它们的类型不同,但属性相同。例子: ObjA: 和ObjB: public class ObjB { private String aaa; private String bbb; private String ccc; private ObjX xxx; //getters and setters } 目前,我比较了它的手动,属性的属性。有没有更好的解决办法?如果没有,您能给我一些提示或示例,说明如何为比较列表和列表编写自
public class ObjB {
private String aaa;
private String bbb;
private String ccc;
private ObjX xxx;
//getters and setters
}
目前,我比较了它的手动,属性的属性。有没有更好的解决办法?如果没有,您能给我一些提示或示例,说明如何为比较列表
和列表
编写自定义匹配器吗?谢谢
编辑:
我决定编写自定义matcher,它扩展了TypeSafeMatcher
,当我比较字符串值时,matcher决定相等,但当我比较对象ObjX时,它被标记为不匹配。
代码:
public类ObjAMatcher扩展了TypeSafeMatcher{
匹配将公共功能(属性)提取到基类,然后比较基类。
public class ObjB {
private String aaa;
private String bbb;
private String ccc;
private ObjX xxx;
//getters and setters
}
public class ObjAMatcher extends TypeSafeMatcher<ObjA> {
Matcher<? super String> aaa;
Matcher<? super String> bbb;
Matcher<? super String> ccc;
Matcher<? super ObjX> xxx;
public ObjAMatcher(ObjB entity) {
aaa = is(entity.getAaa());
bbb = is(entity.getBbb());
ccc = is(entity.getCcc());
xxx = is(entity.getXxx());
}
@Override
protected boolean matchesSafely(ObjB objB) {
boolean equals = true;
match &= aaa.matches(objB.getAaa()); // true
match &= bbb.matches(objB.getBbb()); // true
match &= ccc.matches(objB.getCcc()); // true
match &= xxx.matches(objB.getXxx()); // false
return match;
}
// ...
}