#junit #junit5
#junit #junit5
Вопрос:
Я изменяю метод тестирования с одного параметра на несколько:
@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
здесь передается как строковый литерал вместо нулевого литерала. В результате этот тест завершается неудачей. Этот тест ранее работал с одним аргументом with @NullSource
, но при переключении на несколько выдает следующую ошибку:
org.junit.jupiter.api.extension.Исключение ParameterResolutionException: для параметра не зарегистрирован параметр ParameterResolver…
Я не смог найти обходной путь для этого, и решения, которые я видел, были довольно сложными и громоздкими. Есть ли более простой способ предоставления значений null
?
Ответ №1:
@CsvSource
имеет вызываемый атрибут nullValues
. Смотрите документацию.
Список строк, которые следует интерпретировать как нулевые ссылки.
@CsvSource(value= {"null, null",
"foo, bar"}
, nullValues={"null"})
Другой вариант — просто не передавать никаких значений, как указано в ранее связанной документации.
Пожалуйста, обратите внимание, что пустые значения без кавычек всегда будут преобразовываться в нулевые ссылки независимо от значения этого атрибута nullValues ; тогда как пустая строка в кавычках будет обрабатываться как emptyValue() .
@CsvSource({",",
"foo, bar"})
Ответ №2:
Вы можете использовать нулевые значения, как описано выше @Jan Schmitz, или вы можете просто отбросить нулевые значения следующим образом:
@CsvSource({
",",
"foo, bar"
})