使用匹配器断言集合包含2个具有相同属性的对象



我有以下场景,我想测试someFunction():

Collection<MyObject> objects = someFunction(someInput);
assertThat(objects , contains(hasProperty("property", is(propertyIWantToTest))));

如果Collection<MyObject> objects应该根据传递给someFunction()someInput只有1个MyObject object,则此工作正常。然而,在某些情况下,someInputCollection<MyObject> objects应该有2个或更多的MyObject object包含相同的propertyIWantToTest对象。有办法使用Hamcrest匹配器来测试吗?

这里有一些更接近我想要达到的目标:

assertThat(objects , contains(exactlyTwoTimes(hasProperty("property", is(propertyIWantToTest)))));

如果您想验证每个项目都具有该属性,并且确实有两个项目,那么使用everyItemhasSize:

assertThat(objects, everyItem(hasProperty("property", is(propertyIWantToTest))));
assertThat(objects, hasSize(2));

如果您想专门测试集合的内容,但碰巧两个期望的项目都是相同的,则使用变量和containsInAnyOrder:

Matcher<MyObject> m = hasProperty("property", is(propertyIWantToTest));
assertThat(objects, containsInAnyOrder(m, m));

最新更新