윈도우 JUnit5 출력 테스트 시 AssertionFailedError

jipyo park·2022년 5월 31일
0

junit

목록 보기
2/2

테스트 대상

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));
}

해결!!!!!!!!!!!!!
뭐 이것도 야매도 해결한 것 같긴한데...

0개의 댓글