【问题标题】:JUnit: assert collection contains an element with a certain propertyJUnit:断言集合包含具有特定属性的元素
【发布时间】:2020-03-21 12:00:13
【问题描述】:

如果集合包含具有特定属性值的元素,我想断言(使用 JUnit,而不是任何其他依赖项,如 hamcrest)。

我使用harmcrest 发现了这个问题How do I assert an Iterable contains elements with a certain property?

一种选择是覆盖equals 方法以仅检查我要比较的属性,但这不是一个好的解决方案。

有没有一种优雅的方法可以使用 JUnit 4 来实现,或者我应该对其进行编码并遍历集合以检查值?

【问题讨论】:

    标签: java junit collections


    【解决方案1】:

    Java 8 的流和过滤实际上可以非常优雅:

    Collection<SomeObejct> myCollection = /* something */;
    boolean hasAny = myCollection.stream().anyMatch(s -> s.getProperty().equals("something"));
    assertTrue("Couldn't find an object with the right property", hasAny);
    

    【讨论】:

    • 有效!谢谢!。另一个问题。你知道为什么在我的例子中我应该以不同的顺序提供断言参数(首先是断言错误消息,然后是测试的条件)。可能与我的项目设置stackoverflow.com/questions/60776770/…的其他问题有关
    • @dhalfageme 对不起,那是我的错误。我习惯了 JUnit 5 Jupiter,它的最后一个参数是消息。在 JUnit 4 中,消息确实在第一个参数中。我已经相应地编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2017-12-02
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多