JUnit에서 시스템 출력 테스트
레거시 시스템에서 애플리케이션은 명시적으로 오류를 반환하는 대신 표준 출력에 오류 메시지나 디버그 정보를 인쇄할 수 있습니다. . JUnit을 사용하면 이러한 출력을 테스트하는 것이 어려울 수 있습니다.
문제:
단위 테스트에서는 System.out이 발생하는 경우를 포착하기 위해 콘솔 출력의 콘텐츠를 확인하는 방법이 필요합니다. 올바른 오류 대신 println()이 사용되었습니다.
해결책:
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). 이것이 댓글 작성자가 언급한 NullPointerExceptions의 원인입니다.
위 내용은 JUnit에서 System.out 및 System.err 출력을 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!