공부공부

공부공부-230409

nayoon 2023. 4. 10. 20:14

넥스트스텝 클린코드 TDD 진행 중 @ParameterizedTest를 사용해서 반복을 줄이면서도 여러 테스트를 진행하려고 했다.

 

org.junit.jupiter.api.extension.ParameterResolutionException: 
No ParameterResolver registered for parameter [java.lang.String arg1] in method 
[void calculator.ParserTest.findCustomDelimiter(java.lang.String,java.lang.String,java.lang.String)].

 

에러를 읽어보니 테스트코드의 인자가 하나 부족하다는 말 같았다.

 

    @ParameterizedTest
    @CsvSource(value = {"//;\n1;2;3:;:1;2;3"}, delimiter = ':')
    void findCustomDelimiter(String text, String del, String output){
        Parser parser = new Parser(text);

        assertThat(parser.findDelimiter()).isEqualTo(del);
        assertThat(parser.findText()).isEqualTo(output);
    }

 

@CsvSource를 보면 구분자(delimiter)인 : 를 통해 문자열을 세 개로 나누도록 되어있다.

 

의도대로라면 //;\n1;2;3   /   ;   /  1;2;3 으로 나눠져서 각각 text, del, output으로 들어가는게 맞는데

위와 같은 에러가 떴다.

 

의심가는 부분은 개행문자였는데 \r\n, \n\r, \\n으로 바꿔도 문제는 해결되지 않았다.

 

어디까지나 추측이지만 //;\n1;2;3:;:1;2;3으로 들어간 문자가

 

//;

1;2;3:;:1;2;3으로 읽혀지고 있는 느낌..이었다.

 

왜냐하면 에러코드를 보면 [java.lang.String arg1]이라고 되어있는데

 

제대로 읽혀지지도 않았다면 arg0이라고 되어있어야 하는 것 아닌가..

 

문자열을 한번 감싸보겠습니다..

 

    @ParameterizedTest
    @CsvSource(value = {"'//;\n1;2;3':;:1;2;3"}, delimiter = ':')
    void findCustomDelimiter(String text, String del, String output){
        Parser parser = new Parser(text);

        assertThat(parser.findDelimiter()).isEqualTo(del);
        assertThat(parser.findText()).isEqualTo(output);
    }

테스트 결과는 성공인데 들어간 인자를 확인해보면 , 를 기준으로 잘 나뉜것을 확인할 수 있었다.

 

 

 

@ParameterizedTest는 참고로 name을 지정할 수 있는데

 

@ParameterizedTest(name = "테스트 {index}") 와 같이 지정할 경우 아래와 같이 테스트명이 출력된다.

@ParameterizedTest(name = "테스트 {index}"}
@ValueSource(ints = {2,4,6})
void test() {
...
}


// 테스트 1
// 테스트 2
// 테스트 3

 

무엇을 테스트하는지도 출력할 수 있다.

@ParameterizedTest(name = "테스트 {0}"}
@ValueSource(ints = {2,4,6})
void test() {
...
}


// 테스트 2
// 테스트 4
// 테스트 6

@CsvSource를 이용했을 때 여러 파라미터를 가질 수 있는 경우 {0}, {1}, {2}, ..와 같이 사용하면 된다.

 

 

'공부공부' 카테고리의 다른 글

공부공부-230419  (0) 2023.04.21
공부공부-230410  (0) 2023.04.12
공부공부-230401  (0) 2023.04.01
공부공부-230320  (0) 2023.03.20
공부공부-230319  (0) 2023.03.19