使用JUnitParams的@FileParameters时如何为参数赋值

时间:2016-09-07 15:07:08

标签: java junit junitparams

我尝试使用JUnitParamsRunner的FileParameters注释。我不能给变量赋值null。代码和测试文件如下。

@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 个答案:

答案 0 :(得分:2)

我没有使用@FileParameters,但是对于普通的@Parameters,您可以使用the @Nullable annotation

@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"
}

答案 1 :(得分:1)

默认情况下,这不起作用,因为FileParameters使用IdentityMapper将文件中的行映射到参数,并且就像使用@Parameters({"aaa,bbb", "ccc,ddd"}语法一样无法提供{ {1}}值 - 写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