我有以下场景,我想测试someFunction():
Collection<MyObject> objects = someFunction(someInput);
assertThat(objects , contains(hasProperty("property", is(propertyIWantToTest))));
如果Collection<MyObject> objects
应该根据传递给someFunction()
的someInput
只有1个MyObject object
,则此工作正常。然而,在某些情况下,someInput
的Collection<MyObject> objects
应该有2个或更多的MyObject object
包含相同的propertyIWantToTest
对象。有办法使用Hamcrest匹配器来测试吗?
这里有一些更接近我想要达到的目标:
assertThat(objects , contains(exactlyTwoTimes(hasProperty("property", is(propertyIWantToTest)))));
如果您想验证每个项目都具有该属性,并且确实有两个项目,那么使用everyItem
和hasSize
:
assertThat(objects, everyItem(hasProperty("property", is(propertyIWantToTest))));
assertThat(objects, hasSize(2));
如果您想专门测试集合的内容,但碰巧两个期望的项目都是相同的,则使用变量和containsInAnyOrder
:
Matcher<MyObject> m = hasProperty("property", is(propertyIWantToTest));
assertThat(objects, containsInAnyOrder(m, m));