@CsvSource 사용 시 좌우 공백 자동 제거 막기

eora21·2023년 10월 30일
0

@CsvSource를 이용하여 String의 Trim 관련 테스트를 진행하다가, 자동으로 파라미터들의 공백이 제거된 채 들어가는 것을 발견했습니다.

@ParameterizedTest
@CsvSource(value = {"   좌공백,좌공백", "우공백   ,우공백", "  양쪽공백  ,양쪽공백"})
@DisplayName("공백 제거 테스트")
void trimTest(String text, String trimText) {
    assertThat(text.length()).isGreaterThan(trimText.length());
    assertThat(text.trim()).isEqualTo(trimText);
}

분명 좌측에 공백을 넣어서 6글자가 나와야 하는데, 3글자로 나오고 있습니다.

@ParameterizedTest
@CsvSource(value = {"   좌공백,좌공백", "우공백   ,우공백", "  양쪽공백  ,양쪽공백"})
@DisplayName("공백 제거 테스트")
void trimTest(String text, String trimText) {
    assertThat(text).isEqualTo(trimText);
}

테스트코드를 변형시켜서 확인해보니, 애초에 주입될 때 trim()이 시행되는것을 확인할 수 있었습니다.

공식문서를 확인해 보았습니다.

Except within a quoted string, leading and trailing whitespace in a CSV column is trimmed by default. This behavior can be changed by setting the ignoreLeadingAndTrailingWhitespace() attribute to true.

csv열의 선후행은 기본적으로 잘리도록 설정이 되어있었군요.
우리에게 필요한 건 공백까지 포함한 텍스트이므로, 설정을 바꿔서 다시 테스트해보겠습니다.

@ParameterizedTest
@CsvSource(value = {"   좌공백,좌공백", "우공백   ,우공백", "  양쪽공백  ,양쪽공백"},
        ignoreLeadingAndTrailingWhitespace = false)
@DisplayName("공백 제거 테스트")
void trimTest(String text, String trimText) {
    assertThat(text.length()).isGreaterThan(trimText.length());
    assertThat(text.trim()).isEqualTo(trimText);
}

공백이 제대로 적용되는 것을 확인할 수 있었습니다.

profile
나누며 타오르는 프로그래머, 타프입니다.

0개의 댓글