Как дать нулевое значение параметру при использовании @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"
}
Другие вопросы по тегам