@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);
}
공백이 제대로 적용되는 것을 확인할 수 있었습니다.