Как дать нулевое значение параметру при использовании @FileParameters из JUnitParams
Я пытаюсь использовать аннотацию FileParameters JUnitParamsRunner. Я не могу дать ноль переменной. Код и тестовый файл ниже.
@RunWith(JUnitParamsRunner.class)
public class PasswordCheckerFileParameterizedTest {
@Test
@FileParameters("src/test/resources/testScenarios.csv")
public void checkPasswordIsValid_checkMultipleCase(String password,boolean expectedResult){
PasswordChecker passwordChecker = new PasswordChecker();
assertEquals(expectedResult,passwordChecker.checkPasswordIsValid(password));
}
}
testScenarios.csv
,false
sD1.,false
ssfdsdfsdf234.,false
SEWERWER234.,false
ssfdsdfsdSDFSDF.,false
ssfdsdfsdSDFSDF3234,false
ssfdsdfsdSDFSDF23.,true
2 ответа
Это не работает по умолчанию, так как FileParameters
использования IdentityMapper
сопоставить строки в файле с параметрами, и это работает, как если бы вы использовали @Parameters({"aaa,bbb", "ccc,ddd"}
синтаксис, в котором вы не можете предоставить null
ценность - написание null
даст вам струнное высказывание "null
".
Однако вы можете предоставить свой собственный картограф с помощью FileParameters#mapper
, Он должен вернуть на карту Object[][]
(тот же формат, как если бы вы использовали поставщик параметров метода для @Parameters(method = ...)
). Затем вам нужно решить, каким образом вы будете отмечать null
в вашем файле.
Образец картографа, который обрабатывает строку "xxx"
как null
Маркер будет выглядеть так:
public class XxxToNullMapper implements DataMapper {
@Override
public Object[] map(Reader reader) {
return new BufferedReader(reader).lines()
.map(line -> line.split(","))
.map(columns ->
Stream.of(columns)
.map(column -> column.equals("xxx") ? null : column)
.collect(Collectors.toList()).toArray()
)
.collect(Collectors.toList()).toArray();
}
}
Использование:
@Test
@FileParameters(
value = "/test.csv",
mapper = XxxToNullMapper.class
)
public void xxxIsNullFileParameters(String a, String b) {
System.out.println("Params are: " + a + " (is null? " + (a == null) + "), " + b + " (is null? " + (b == null) + ")");
}
/test.csv
:
aaa,bbb
aaa,xxx
Печать
Params are: aaa (is null? false), bbb (is null? false)
Params are: aaa (is null? false), null (is null? true)
Я не использовал @FileParameters
но для нормального @Parameters
Вы можете использовать аннотацию @Nullable:
@Test
@Parameters({"null, , null"})
public void yourTest(@Nullable String nullable, String blank, String textIsNull) {
// important part ^^^^^^^^^ but no @Nullable here ^^
assertThat(nullable).isNull(); // it worked!
assertThat(blank).equals("");
assertThat(textIsNull).equals("null"); // not null but the string "null"
}