2016-09-07 107 views
1

我嘗試使用JUnitParamsRunner的FileParameters註釋。我無法給變量賦予null。代碼和測試文件如下。如何在使用JUnitParams的@FileParameters時爲參數提供空值

@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 

回答

1

這並不在默認情況下,因爲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) 
相關問題