| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- HashMap
- html
- IntelliJ
- 자바
- java테스트
- 테스트자동화
- Eclipse
- 정규식
- list
- Java
- Visual Studio Code
- junit5
- 문자열
- js
- string
- 배열
- Array
- 단위테스트
- ArrayList
- javascript
- junit
- json
- 자바스크립트
- 인텔리제이
- input
- 이클립스
- vscode
- 자바문법
- CSS
- math
- Today
- Total
어제 오늘 내일
[JUnit] TestResult 활용 – 실행 결과와 실패 정보 확인하기 본문
JUnit의 테스트 실행 구조를 이해하려면 TestResult 객체가 어떤 역할을 하는지 알고 있어야 합니다.
특히 JUnit3·4 스타일에서는 TestResult가 테스트 실행 과정에서
- 몇 개의 테스트가 실행되었는지
- 실패는 무엇인지
- 어떤 예외가 발생했는지
등을 모두 기록하는 핵심 클래스였습니다.
JUnit5에서도 내부 개념은 유지되며, 리스너 기반의 결과 수집이 사실상 TestResult의 확장된 형태입니다.
이 글에서는 TestResult가 어떤 일을 하는지, 어떻게 활용되는지, 실전 예제 중심으로 쉽게 정리합니다.
1. TestResult란 무엇인가?
TestResult는 테스트 실행 결과를 저장하는 객체입니다.
테스트가 실행되면 JUnit 러너는 그 결과를 TestResult에 하나씩 기록합니다.
TestResult가 관리하는 대표 정보
- 실행된 테스트 개수
- 실패(failures) 목록
- 에러(errors) 목록
- 성공 여부
- 테스트 실행 중 발생한 예외
즉, 테스트 완료 후 결과를 요약하는 보고서 역할을 합니다.
2. TestResult 기본 사용 패턴 (JUnit3 방식)
JUnit3에서는 직접 TestResult 객체를 만들어 테스트를 실행하는 방식이 흔했습니다.
예제 코드
import junit.framework.TestResult;
import junit.framework.TestSuite;
public class RunWithResult {
public static void main(String[] args) {
TestSuite suite = new TestSuite(MyTest.class);
TestResult result = new TestResult();
suite.run(result); // 실행 결과가 result에 담김
System.out.println("실행된 테스트 수: " + result.runCount());
System.out.println("실패한 테스트 수: " + result.failureCount());
System.out.println("에러 발생 수: " + result.errorCount());
}
}
실행 흐름
- TestSuite가 내부 테스트를 차례대로 실행
- 각 테스트의 성공/실패 정보를 result에 기록
- 실행 후 result에서 요약 정보 사용 가능
3. 실패 정보 확인하기 – Failure 객체
실패가 발생한 경우 TestResult는 Failure 객체 목록을 통해 상세 정보를 제공합니다.
예제
for (Object failure : result.failures()) {
System.out.println("실패 정보: " + failure);
}
Failure에 담기는 정보
- 실패한 테스트 이름
- Assertion 실패 메시지
- 스택 트레이스
즉, 어떤 테스트가 왜 실패했는지 디버깅할 수 있게 해주는 핵심 정보입니다.
4. TestResult의 실제 동작 구조
TestResult는 테스트 실행 중 다음과 같은 이벤트를 기록합니다.
- startTest() – 테스트 시작
- addFailure() – Assertion 실패
- addError() – 예외(Error) 발생
- endTest() – 테스트 끝
이 흐름은 JUnit 내부에서 자동으로 호출됩니다.
즉, TestResult는 테스트 수집기가 아니라 테스트 실행 리스너라고 볼 수 있습니다.
5. JUnit4에서의 TestResult 활용
JUnit4에서는 보통 JUnitCore를 통해 Result 객체를 사용하지만,
원리적으로는 TestResult와 동일한 역할을 수행합니다.
예제
Result result = JUnitCore.runClasses(MyTest.class);
System.out.println("실패 수: " + result.getFailureCount());
for (Failure f : result.getFailures()) {
System.out.println("실패한 테스트: " + f.getTestHeader());
System.out.println("원인: " + f.getMessage());
}
JUnit4의 Result = JUnit3의 TestResult라고 이해하면 됩니다.
6. JUnit5에서의 대응 개념은?
JUnit5는 더 이상 TestResult를 직접 사용하지 않고,
Launcher API + TestExecutionListener 조합으로 결과를 수집합니다.
예:
public void executionFinished(TestIdentifier testIdentifier,
TestExecutionResult result) {
// 테스트 성공/실패/에러 정보를 여기서 확인
}
즉, TestResult가 리스너 기반 구조로 확장된 형태라고 보면 됩니다.
7. TestResult 사용 시 주의할 점
- 대부분 레거시 코드에서만 사용
- JUnit5에서는 직접 사용하지 않음
- 스위트 실행 시 테스트 순서에 따라 결과가 누적되므로 주의
- 테스트마다 독립적인 실행 환경이 필요
- Assertion 실패(failure)와 에러(error)는 구분해야 함
- failure: 검사(assert) 실패
- error: 예상하지 못한 예외
- 테스트 개수가 많을 경우 결과 로그가 매우 장황해질 수 있음
- CI 시스템에서는 필터링하거나 요약 옵션 필요
8. 정리
- TestResult는 테스트 실행 결과 요약 객체
- 실행된 테스트 수, 실패 정보, 에러 정보 등을 관리
- JUnit3·4에서 직접 사용할 수 있고, JUnit5에서는 리스너 방식으로 대체
- 디버깅 및 테스트 자동화 환경에서 유용하게 활용 가능
'IT > JUnit' 카테고리의 다른 글
| [JUnit] getName() – 테스트 이름 가져오기 (0) | 2026.01.14 |
|---|---|
| [JUnit] TestRunner 동작 – 내부 구조 이해하기 (0) | 2026.01.13 |
| [JUnit] run() 메소드 – 테스트 실행 흐름 따라가기 (0) | 2026.01.12 |
| [JUnit] suite() 메소드 – 테스트 묶음 구성 패턴 (0) | 2026.01.12 |
| [JUnit] TestSuite 사용법 – 여러 테스트 클래스를 하나로 묶기 (0) | 2026.01.11 |
