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

标签 java testing junit junit4 hamcrest

<分区>

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

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

如果Collection<MyObject> objects,这工作正常应该只有 1 MyObject object根据 someInput传递给 someFunction() . 但是,有些情况下 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));

关于java - 使用匹配器断言 Collection 包含 2 个具有相同属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24038842/

相关文章:

java - iOS 日历的 Android 对应物是什么?

java - 如何重新分配已输入的基于扫描仪的值? - java

reactjs - 具有多阶段 dockerfile 的多个 gitlab-ci 阶段

java - 如何处理相互依赖的 JUnit 测试?

java - 如何在 Eclipse 中运行通用参数化 JUnit 测试?

database - 在 H2 中测试 DB2 时间戳功能

java - 当连接关闭时间过长时,如何强制关闭连接池中的连接?

java - 内联领域特定语言以生成 Java 代码

testing - 我们是否在创建测试计划之前/之后准备需求可追溯性矩阵?

sql-server - 如何复制表格和数据以进行测试