public class TestClass {
void method(String[] tempalte) {
for (String temp : tempalte) {
System.out.println(temp);
}
}
}
@Test
void 줄바꿈문자열_확인() {
String[] testString = {"12", "as"};
String compareResult =
"12\n" +
"as";
TestClass test = new TestClass();
test.method(testString);
assertThat(output.toString().trim())
.isEqualTo(compareResult);
}
이렇게 하니 값은 똑같이 나오는데 계속 값이 같지 않다고 뜬다..
이게 뭔고...하니 줄바꿈시 window는 CRLF를 사용하는데 compareResult에는 LF밖에 선언을 안해주어서 그런듯하다..
assertThat(output.toString().trim().getBytes())
.isEqualTo(compareResult.getBytes());
로 문자열 인덱스별 바이트를 확인해보면
// compareResult.getBytes()
[49, 50, 10, 97, 115]
// output.toString().trim().getBytes()
[49, 50, 13, 10, 97, 115]
이렇게 값이 나오게 됨
output에서는 13, 즉 CR이 들어가있음
반면 compareResult에는 13이 빠져있는 것을 확인할 수 있음
public String convertLFToCRLF (String str) {
StringBuilder convert = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '\n' && str.charAt(i - 1) != '\r') {
convert.append('\r');
}
convert.append(str.charAt(i));
}
return convert.toString();
}
@Test
void 줄바꿈문자열_확인_v2() {
String[] testString = {"12", "as"};
String compareResult =
"12\n" +
"as";
TestClass test = new TestClass();
test.method(testString);
assertThat(output.toString().trim())
.isEqualTo(convertLFToCRLF(compareResult));
}
해결!!!!!!!!!!!!!
뭐 이것도 야매도 해결한 것 같긴한데...