首页 > 解决方案 > 选项列表上的 AssertJ

问题描述

我有一个可选列表,List<Optional<String>> optionals我喜欢用assertj它来断言几件事。

但我没能正确地做到这一点——我只在单个 Optional 上找到示例。

当然我可以自己做所有的检查,比如

Assertions.assertThat(s).allMatch(s1 -> s1.isPresent() && s1.get().equals("foo"));

并链接那些,但我仍然有一种感觉,通过 api 有一种更聪明的方式。

List<Optional<T>>我在这里错过了什么,还是在 assertj中没有支持?

标签: javaassertj

解决方案


AssertJ 似乎没有为可选集合提供实用程序,但您可以迭代您的列表并对每个项目执行您的断言。

list.forEach(element -> assertThat(element)
        .isPresent()
        .hasValue("something"));

一种可能更好的方法是收集所有断言,而不是停留在第一个断言上。你可以用SoftAssertions不同的方式使用,但我更喜欢这个:

SoftAssertions.assertSoftly(softly ->
    list.forEach(element -> softly.assertThat(element).isPresent())
);

推荐阅读