当前位置: 首页 > 知识库问答 >
问题:

如何断言Iterable包含具有特定属性的元素?

邵锐
2023-03-14

假设我想用这个签名对一个方法进行单元测试:

List<MyItem> getMyItems();

假设MyItem是一个具有许多属性的Pojo,其中一个属性是“name”,通过getName()访问。

我所关心的只是验证列表

如果可能的话,我希望它是一行的。这里有一些我想做的“伪语法”。

assert(listEntriesMatchInAnyOrder(myClass.getMyItems(), property("name"), new String[]{"foo", "bar"});

Hamcrest适合做这种事吗?如果是这样的话,我上面的伪语法的hamcrest版本到底是什么?


共有3个答案

有权
2023-03-14

它不是特别的Hamcrest,但我认为这里值得一提。我在Java8中经常使用的是这样的东西:

assertTrue(myClass.getMyItems().stream().anyMatch(item -> "foo".equals(item.getName())));

(根据罗德里戈·曼亚里(Rodrigo Manyari)的轻微改进进行了编辑。它稍微不那么冗长。请参见评论。)

它可能有点难读,但是我喜欢它的类型和重构安全性。它也很酷,用于测试组合中的多个bean属性。例如,用类似java的

谭锐藻
2023-03-14

尝试:

assertThat(myClass.getMyItems(),
                          hasItem(hasProperty("YourProperty", is("YourValue"))));
湛嘉歆
2023-03-14

谢谢你@Razvan为我指明了正确的方向。我能在一条线上找到它,我成功地找到了Hamcrest 1.3的进口产品。

进口:

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.beans.HasPropertyWithValue.hasProperty;

代码:

assertThat( myClass.getMyItems(), contains(
    hasProperty("name", is("foo")), 
    hasProperty("name", is("bar"))
));
 类似资料:
  • 如果集合包含具有特定属性值的元素,我想断言(使用JUnit,而不是任何其他依赖项,如hamcrest)。 我发现这个问题如何断言迭代包含具有特定属性的元素?使用危害冠。 一种选择是重写< code>equals方法,只检查我想要比较的属性,但这不是一个好的解决方案。 有没有一种优雅的方法可以使用JUnit 4来实现这一点,或者我应该对其进行编码并循环访问集合以检查值?

  • 有人能帮我解决以下问题吗? 我已经加载了2000多个元素的map,但其中只有一个元素(当前可见)具有属性d不同于零的元素“path”。为便于理解,请参阅以下屏幕截图: 试过这个:SVG 还有这个XPath: 找到了所有这些(2000年)。 我想要的是这样的东西(尽管我找不到正确的解决方案)——故意添加了Xpath的末尾。 总之,我需要d属性(内部路径)不包含值零: 请协助,并提前感谢您。

  • 问题内容: 我试图通过将所有参数元素为type_id =“ 4218”的所有“ ”元素从URL解析XML文件? XML文件: 这是我的Java代码: 这段代码给了我所有元素,我不想要,我想要属性type_id =“ 4218”的所有元素! 问题答案: XPath是您的正确选择: 并遍历

  • 问题内容: 如何检查seleniumWeb元素是否包含特定的CSS类。 我有这个html li元素 如您所见,在class属性内部有一个活动类。 我的问题是我有这个元素,我想根据class属性是否具有其他“ active”值进行检查,这是比使用xpath更优雅的解决方案。 我怎样才能做到这一点? 问题答案: 鉴于您已经找到了您的元素,并且您想检查class属性内的某个类: 正如@aurelius正

  • 请看do while循环,我认为注释是不言自明的。我想检查该集合是否设置了所有具有符号a、b、c、d的卡片(借助数组或其他任何东西实现它)。

  • 问题内容: 在XML文档中,我具有共享相同名称的元素,但是属性的值定义了它是什么类型的数据,并且我想从文档中选择所有具有特定值的元素。我是否需要使用XPath(如果可以,您是否可以建议正确的语法)还是有更优雅的解决方案? 这是一些示例XML: 我想选择类型为的所有子代标签的内容。 PS-我正在尝试使用PHP与Netflix API进行接口-这对我的问题无关紧要,但是如果您想提出一种更好的方法,我非