Assertj验证集合中每个项目的字段始终为空

pie*_*ier 4 java assertj

我正在寻找一种解决方案,以检查集合中的每个项目都具有expectedNullFieldnull 字段。

以下内容不起作用:

assertThat(aCollection).extracting("expectedNullField").isNull();

请注意以下工作正常: assertThat(aCollection).extracting("expectedNotNullField").isNotNull();

有人帮我吗?

谢谢。

Joe*_*ola 6

如果您知道尺寸(假设是3),则可以使用

assertThat(aCollection).extracting("expectedNullField")
                       .containsOnly(null, null, null);
Run Code Online (Sandbox Code Playgroud)

或者如果您只想检查是否有空值

assertThat(aCollection).extracting("expectedNullField")
                       .containsNull();
Run Code Online (Sandbox Code Playgroud)

请注意,您不能使用:

    assertThat(aCollection).extracting("expectedNullField")
                           .containsOnly(null);
Run Code Online (Sandbox Code Playgroud)

因为它是模棱两可的(仅包含varargs参数)。

我可能会考虑添加containsOnlyNullElements()AssertJ以克服上面的编译器错误。

  • 那是因为它试图将 null 转换为 varargs,这是一个不应为 null 的值数组。您可以通过将 null 转换为元素集合类型来使用它,例如:`assertThat(aCollection).extracting("stringField") .containsOnly((String)null);` (2认同)

Djo*_*jon 0

您可以使用条件

Condition<YourClass> nullField = new Condition<>("expecting field to be null") {
  @Override
  public boolean matches(YourClass value) {
    return value.getField() == null;
  }
};

assertThat(aCollection).have(nullField);
Run Code Online (Sandbox Code Playgroud)

这可能比其他解决方案更容易阅读

assertThat(aCollection).filteredOn("expectedNullField", not(null)).isEmpty();
Run Code Online (Sandbox Code Playgroud)