2016-09-07 1 views
1

JUnitParamsRunner의 FileParameters 주석을 사용하려고합니다. 나는 변수에 null을 줄 수 없다. 코드와 테스트 파일은 아래와 같습니다.JUnitParams의 @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)); 
    } 
} 

FileParameters 때문에 기본적으로 작동하지 않습니다

,false 
sD1.,false 
ssfdsdfsdf234.,false 
SEWERWER234.,false 
ssfdsdfsdSDFSDF.,false 
ssfdsdfsdSDFSDF3234,false 
ssfdsdfsdSDFSDF23.,true 

답변

1

testScenarios.csv는 매개 변수 파일의 행을 매핑 IdentityMapper를 사용하는 당신이 제공 할 수 없습니다 당신이 @Parameters({"aaa,bbb", "ccc,ddd"} 구문을 사용하는 것처럼 그 작동 a null 값 - null을 쓰면 "null이라고하는 문자열이 표시됩니다.

그러나 사용자가 직접 매퍼를 제공 할 수는 있습니다. 수단은 FileParameters#mapper입니다. 매핑 된 Object[][] (@Parameters(method = ...)에 대한 메서드 매개 변수 공급자를 사용한 것과 같은 형식)을 반환해야합니다. 그런 다음 파일에 null을 어떤 방법으로 표시할지 결정해야합니다.

null 마커로 문자열 "xxx" 취급 샘플 매퍼는 다음과 같이 보일 것이다 :

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) 
관련 문제