Junit 5 - 如何在 @CsvSource 中传递多个 null 值?

35

我正在将一个测试方法从单参数修改为多参数:

@ParameterizedTest
@NullSource
@ValueSource({"foo", "bar"..})
void shouldReturnFalse(String x) {
  assertThat(someMethod(x)).isFalse();
}

@ParameterizedTest
@CsvSource({
  "null, null",
  "foo, bar"
})
void shouldReturnFalse(String x, String y) {
  assertThat(someMethod(x, y)).isFalse();
}

null在此处作为字符串字面量而不是空字面量传递。因此,此测试失败。此测试先前使用单个参数和@NullSource可以正常工作,但切换到多个参数时会出现以下错误:

org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter...

我找不到解决方法,看到的解决方案都相当麻烦。是否有更简单的方法提供null值?

2个回答

71

@CsvSource 有一个名为 nullValues 的属性。 请查看文档

一组应被解释为 null 引用的字符串。

@CsvSource(value= {"null, null",
                   "foo, bar"}
           , nullValues={"null"})

另一种选择是根据先前链接的文档所述,不传递任何值。

请注意,未引用的空值始终会转换为 null 引用,而不考虑 nullValues 属性的值;而引用的空字符串将被视为 emptyValue()。

@CsvSource({",",
            "foo, bar"})

9
您可以像 @Jan Schmitz 上面解释的那样使用 nullValues,或者您可以像这样丢弃空值:
@CsvSource({
  ",",
  "foo, bar"
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接