如何断言对象列表具有一组具有特定值的属性
How to assertThat a list of objects has a set of properties with certain values
使用 Hamcrest 库,我需要断言具有特定属性的对象列表(java bean)与一组属性相匹配。例如,如果我们有一个具有 firstName、lastName 和 middleName 属性的 Person 对象列表,我尝试了以下操作:
assertThat(personObjectList, either(contains(
hasProperty("firstName", is("Bob")),
hasProperty("lastName", is("Smith")),
hasProperty("middleName", is("R.")))
.or(contains(
hasProperty("firstName", is("Alex")),
hasProperty("lastName", is("Black")),
hasProperty("middleName", is("T."))));
但是在执行过程中并没有得到对象的属性,我只是得到了与对象T的比较,输出如下:
but: was Person@7bd7c4cf, was Person@5b9df3b3
有没有办法使用 Hamcrest 完成我在这里尝试做的事情?这在执行单个包含时有效,但是当使用 either() 执行两个包含时,我收到上面的输出。
您可以使用 anyOf
method。例如:
List<Person> persins = Arrays.asList( new Person("Bob", "Smith", "R."));
assertThat(persons, contains(anyOf(
sameProprtyValues(new Person("Bob", "Smith", "R.")),
sameProprtyValues(new Person("Alex", "Black", "T."))
));
如果您想使用多个属性,您应该尝试:
assertThat(persons, contains(
either(
both(hasProperty("firstName", is("Bob")))
.and(hasProperty("lastName", is("Smith")))
.and(hasProperty("middleName", is("R.")))
).or(
both(hasProperty("firstName", is("Alex")))
.and(hasProperty("lastName", is("Black")))
.and(hasProperty("middleName", is("T.")))
)
));
使用 Hamcrest 库,我需要断言具有特定属性的对象列表(java bean)与一组属性相匹配。例如,如果我们有一个具有 firstName、lastName 和 middleName 属性的 Person 对象列表,我尝试了以下操作:
assertThat(personObjectList, either(contains(
hasProperty("firstName", is("Bob")),
hasProperty("lastName", is("Smith")),
hasProperty("middleName", is("R.")))
.or(contains(
hasProperty("firstName", is("Alex")),
hasProperty("lastName", is("Black")),
hasProperty("middleName", is("T."))));
但是在执行过程中并没有得到对象的属性,我只是得到了与对象T的比较,输出如下:
but: was Person@7bd7c4cf, was Person@5b9df3b3
有没有办法使用 Hamcrest 完成我在这里尝试做的事情?这在执行单个包含时有效,但是当使用 either() 执行两个包含时,我收到上面的输出。
您可以使用 anyOf
method。例如:
List<Person> persins = Arrays.asList( new Person("Bob", "Smith", "R."));
assertThat(persons, contains(anyOf(
sameProprtyValues(new Person("Bob", "Smith", "R.")),
sameProprtyValues(new Person("Alex", "Black", "T."))
));
如果您想使用多个属性,您应该尝试:
assertThat(persons, contains(
either(
both(hasProperty("firstName", is("Bob")))
.and(hasProperty("lastName", is("Smith")))
.and(hasProperty("middleName", is("R.")))
).or(
both(hasProperty("firstName", is("Alex")))
.and(hasProperty("lastName", is("Black")))
.and(hasProperty("middleName", is("T.")))
)
));