Java 用于复杂对象列表的Hamcrest匹配器,每个对象包含一个复杂对象列表
很抱歉标题太长,但我的问题如下 我有这些课程Java 用于复杂对象列表的Hamcrest匹配器,每个对象包含一个复杂对象列表,java,junit,hamcrest,Java,Junit,Hamcrest,很抱歉标题太长,但我的问题如下 我有这些课程 public class A { int a1; int a2; List<B> listOfB; } 如果只为B声明它拥有的C列表,我将使用以下自定义匹配器; Matcher-cMatcher=Matchers.hasItems(allOf(hasProperty(“c1”),equalTo(c1)),hasProperty(“c2”,equalTo(c2))) 但是如何从A执行断言呢?我想在一个更大范围的匹配
public class A {
int a1;
int a2;
List<B> listOfB;
}
如果只为B
声明它拥有的C
列表,我将使用以下自定义匹配器;
Matcher-cMatcher=Matchers.hasItems(allOf(hasProperty(“c1”),equalTo(c1)),hasProperty(“c2”,equalTo(c2)))
但是如何从A
执行断言呢?我想在一个更大范围的匹配器中使用这个C
列表匹配器,它执行以下操作:
Matchers.hasItems(allOf(hasProperty(“b1”,equalTo(b1)),hasProperty(“b2”,equalTo(b2)),hasProperty(“listOfC”,cMatcher)))
因此,在某种程度上,我希望将B
列表中的B
与b1
和b2
值,以及包含特定C
的listOfC
与c1
和c2值相匹配,同时您可以创建一个复合Hamcrest匹配器,您面临的困难概括了您的测试方法的一个缺点
建议将测试绑定到每个类,而不是其他类
A
有一个正确的B
列表是可以的,但是那些C
s的行为完全取决于B
,应该属于它的测试。很抱歉回答我自己的问题,但我最后给出的代码是正确的。内部列表C
的匹配器约束存在一些问题
因此,要匹配列表中的列表
Matcher-cMatcher=Matchers.hasItems(allOf(hasProperty(“c1”),equalTo(c1)),hasProperty(“c2”,equalTo(c2)))
然后在更高范围的匹配器中使用此选项
Matchers.hasItems(allOf(hasProperty(“b1”,equalTo(b1)),hasProperty(“b2”,equalTo(b2)),hasProperty(“listOfC”,cMatcher)))
将符合我在问题中描述的情况
我遇到的问题是C
类中的一个字段,其类型为Boolean
,不知何故hasProperty(“boolField”,true)
不匹配,表示属性“boolField”不可读。可能是因为Boolean的getter方法没有get
前缀,我同意,但是我所说的类是在我实际测试的类的主方法的响应对象中。这些A
、B
和C
类的结构是我无法理解的。
public class B {
int b1;
int b2;
List<C> listOfC;
}
public class C {
int c1;
int c2;
}