>Java >java지도 시간 >JUnit에서 'System.out.println()'을 단위 테스트하는 방법은 무엇입니까?

JUnit에서 'System.out.println()'을 단위 테스트하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-29 19:57:10713검색

How to Unit Test `System.out.println()` in JUnit?

JUnit으로 System.out.println() 테스트

표준 출력에 오류 메시지를 기록하는 애플리케이션에 대한 JUnit 테스트를 어떻게 작성할 수 있습니까? , 특히 이러한 메시지가 일관성이 없고 신뢰할 수 없는 경우에는 더욱 그렇습니다. 이러한 시나리오를 효과적으로 테스트하려면 콘솔 출력을 캡처하고 해당 콘텐츠를 어설션해야 합니다.

콘솔 출력 리디렉션

콘솔 출력을 캡처하려면 표준 출력(System.out)을 모두 리디렉션해야 합니다. ) 및 테스트 중 표준 오류(System.err)가 발생합니다. 이는 ByteArrayOutputStream 및 System.setXXX 메서드를 사용하여 달성할 수 있습니다. 구현 예는 다음과 같습니다.

private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
private final PrintStream originalOut = System.out;
private final PrintStream originalErr = System.err;

@Before
public void setUpStreams() {
    System.setOut(new PrintStream(outContent));
    System.setErr(new PrintStream(errContent));
}

@After
public void restoreStreams() {
    System.setOut(originalOut);
    System.setErr(originalErr);
}

샘플 테스트 사례

콘솔 출력이 리디렉션되면 예상되는 출력을 확인하는 테스트 사례를 작성할 수 있습니다.

@Test
public void out() {
    System.out.print("hello");
    assertEquals("hello", outContent.toString());
}

@Test
public void err() {
    System.err.print("hello again");
    assertEquals("hello again", errContent.toString());
}

이 테스트 사례에서는 시스템 출력이 예상대로인지 확인하여 애플리케이션 로그가 다른 요청과 일치하는지 확인할 수 있습니다.

참고: 이 답변의 이전 버전에서는 테스트 후에 System.setOut(null)이 사용되었으므로 NullPointerException이 발생할 수 있습니다. 업데이트된 코드는 이러한 문제를 방지하기 위해 각 테스트 후에 원본 스트림을 올바르게 복원합니다.

위 내용은 JUnit에서 'System.out.println()'을 단위 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.