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

时间:2014-06-04 13:31:26

标签: java testing junit junit4 hamcrest

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

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

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

这里有一些更接近我愿意实现的目标:

propertyIWantToTest

1 个答案:

答案 0 :(得分:2)

如果您想验证每件商品是否包含该商品,并且确实只有两件商品,请使用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));