Java 如何在使用JUnitParams的@FileParameters时为参数指定空值
我尝试使用JUnitParamsRunner的FileParameters注释。我不能给变量赋null。下面是代码和测试文件Java 如何在使用JUnitParams的@FileParameters时为参数指定空值,java,junit,junitparams,Java,Junit,Junitparams,我尝试使用JUnitParamsRunner的FileParameters注释。我不能给变量赋null。下面是代码和测试文件 @RunWith(JUnitParamsRunner.class) public class PasswordCheckerFileParameterizedTest { @Test @FileParameters("src/test/resources/testScenarios.csv") public void checkPassword
@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
这在默认情况下不起作用,因为
FileParameters
用于将文件中的行映射到参数,这就好像您使用了@参数({“aaa,bbb”,“ccc,ddd”}
语法,其中您不能提供null
值-写入null
将给您一个字符串,表示“null
”
但是,您可以通过FileParameters#mapper
提供自己的映射器。它必须返回映射的对象[][]
(与您使用@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
,您可以使用:
这绝对是最好的解决方案。我试过了,效果非常好。
@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"
}