반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- vscode
- json
- 인텔리제이
- IntelliJ
- 단위테스트
- 정규식
- javascript
- input
- 문자열
- junit5
- junit
- 이클립스
- list
- 배열
- math
- 자바스크립트
- Array
- js
- CSS
- 자바문법
- Visual Studio Code
- java테스트
- Java
- string
- 자바
- 테스트자동화
- Eclipse
- html
- ArrayList
- HashMap
Archives
- Today
- Total
어제 오늘 내일
[JUnit] fail() – 여기까지 오면 안 되는 경우 강제 실패 본문
1. fail() 메소드는 무엇인가?
fail() 메소드는 JUnit에서 테스트 흐름상 절대로 도달하면 안 되는 지점에 도달했음을 알리기 위해 강제로 테스트를 실패시키는 메소드입니다.
예외가 반드시 발생해야 하는 코드나 특정 조건 검증에서, 의도한 경로가 아닌 다른 경로로 실행되었음을 명확히 표현할 수 있습니다.
JUnit5의 대표적인 메소드 정의는 다음과 같습니다.
fail();
fail(message);
- message: 강제 실패 시 출력할 설명 메시지
2. 기본적인 fail() 사용 예제
import static org.junit.jupiter.api.Assertions.fail;
import org.junit.jupiter.api.Test;
public class FailTest {
@Test
void testFailBasic() {
fail("이 코드는 실행되면 안 됩니다.");
}
}
코드 설명
- fail()이 호출되면 즉시 테스트는 실패합니다.
- 특정 상황이 반드시 발생하면 안 되는 경우를 확인할 때 유용합니다.
3. 예외 테스트에서 fail()을 활용하는 전통적인 방식
JUnit5의 assertThrows()가 등장하기 전에는 fail()을 활용하여 예외가 발생해야 하는 코드를 테스트하는 방식이 널리 사용되었습니다.
@Test
void testExceptionOldWay() {
try {
int result = 10 / 0; // 예외 발생해야 함
fail("예외가 발생하지 않았습니다.");
} catch (ArithmeticException e) {
// 정상 흐름: 예외가 발생해야 통과
}
}
코드 설명
- 예외가 발생하지 않으면 fail()이 호출되어 테스트가 실패합니다.
- catch 블록에 도달하면 테스트는 성공입니다.
- 현재는 assertThrows() 사용을 권장하지만, 기존 코드에서 여전히 볼 수 있는 방식입니다.
4. 조건문에서 fail() 사용하기
로직 흐름에서 특정 조건이 절대로 발생하면 안 되는 경우를 명시할 때 사용합니다.
@Test
void testCondition() {
int value = 5;
if (value < 0) {
fail("value는 음수가 되면 안 됩니다.");
}
// 정상 처리
}
코드 설명
- value < 0은 발생하면 안 되는 상황입니다.
- 그 조건이 발생하면 즉시 테스트를 실패시키는 방식으로 방어적 테스트가 가능합니다.
5. switch 문에서 예상하지 못한 분기 처리 확인하기
@Test
void testSwitchCase() {
String type = "C";
switch (type) {
case "A":
case "B":
// 정상 처리
break;
default:
fail("예상하지 못한 타입입니다.");
}
}
코드 설명
- 처리 가능한 타입이 아닌 경우 default에서 테스트를 강제 실패시킵니다.
- 예측되지 않은 경로를 명확하게 잡아낼 수 있습니다.
6. fail() 사용 시 주의할 점
6.1 의도한 실패 위치를 명확히 해야 합니다.
fail()이 호출되면 즉시 테스트가 종료되므로, 코드 흐름상 어떤 이유로 실패했는지 명확한 메시지를 작성하는 것이 중요합니다.
6.2 예외 테스트에는 assertThrows() 사용 권장
fail()을 사용하는 예외 테스트 방식은 여전히 유효하지만,
JUnit5에서는 가독성과 안정성이 높은 assertThrows() 사용을 우선적으로 고려해야 합니다.
6.3 불필요한 fail() 호출을 피해야 합니다.
정상 흐름에서도 실수로 fail()이 남아 있는 경우 전체 테스트가 실패하므로 관리에 주의해야 합니다.
7. 정리
fail() 메소드는 테스트 코드에서 절대로 실행되어서는 안 되는 코드가 실행되었음을 명확히 표시하는 강력한 도구입니다.
전통적인 예외 테스트 방식뿐 아니라, 예측 불가한 분기나 방어적 테스트에도 활용됩니다.
테스트 흐름의 안정성을 높이기 위해 의도한 실패 지점을 정확히 표현할 때 매우 유용합니다.
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit] @BeforeEach, @AfterEach로 테스트 공통 준비 코드 관리하기 (0) | 2026.01.08 |
|---|---|
| [JUnit] assertAll을 활용한 DTO/엔티티 필드 일괄 검증 (0) | 2026.01.07 |
| [JUnit] assertThrows() – 예외 발생 여부 테스트 (0) | 2026.01.06 |
| [JUnit] assertNull(), assertNotNull() – null 여부 확인 (0) | 2026.01.06 |
| [JUnit] assertTrue(), assertFalse() – 조건식이 맞는지 검사 (0) | 2026.01.05 |
Comments
