반응형
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
- Visual Studio Code
- IntelliJ
- 인텔리제이
- java테스트
- js
- 자바문법
- Array
- 이클립스
- input
- 배열
- Eclipse
- 문자열
- 단위테스트
- junit5
- string
- 자바스크립트
- 테스트자동화
- CSS
- HashMap
- ArrayList
- html
- javascript
- 정규식
- math
- vscode
- junit
- 자바
- Java
- list
- json
Archives
- Today
- Total
어제 오늘 내일
[JUnit5] assumingThat()으로 부분 조건부 테스트 처리 본문
1. assumingThat()이란 무엇인가
assumingThat()은 JUnit5의 Assumptions 기능 중 하나로, 특정 조건이 참일 때만 일부 코드 블록을 실행하는 방식을 제공한다.
assumeTrue()나 assumeFalse()처럼 테스트 전체를 스킵하는 것이 아니라, 테스트는 계속 실행되되 특정 부분만 조건부로 실행한다는 특징이 있다.
환경에 따라 일부 검증 로직만 필요한 경우에 유용하며, 전체 테스트 흐름을 끊지 않고 조건 기반 로직을 자연스럽게 포함할 수 있다.
2. 기본 사용 예제
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assumptions.*;
import static org.junit.jupiter.api.Assertions.*;
class AssumingThatTest {
@Test
void testPartialConditionalExecution() {
String os = System.getProperty("os.name");
assumingThat(os.startsWith("Windows"), () -> {
// Windows에서만 실행되는 부분
assertTrue(os.contains("Win"));
});
// 어떤 환경에서도 실행되는 공통 테스트 코드
assertNotNull(os);
}
}
설명
- assumingThat() 블록은 조건이 참일 때만 실행된다.
- 조건이 거짓이어도 테스트는 스킵되지 않고, 블록 아래 코드들은 정상적으로 실행된다.
- 전체 테스트를 선택적으로 실행하는 assumeTrue()와 달리, “부분 실행”이라는 점이 핵심 차이이다.
3. 외부 서비스 상태 기반 조건부 코드 실행
조건을 이용해 외부 서비스가 사용 가능할 때만 일부 검증을 넣는 패턴이다.
@Test
void testServiceConditionalCheck() {
boolean serviceUp = isServiceAvailable();
assumingThat(serviceUp, () -> {
assertEquals("OK", callService());
});
// 서비스 상태와 관계없이 수행해야 하는 공통 검증
assertTrue(true);
}
private boolean isServiceAvailable() {
return true; // 예: ping, health-check 등의 결과
}
설명
- 서비스가 정상일 때만 서비스별 응답 검증을 수행한다.
- 서비스 상태가 좋지 않아도 테스트 전체는 정상적으로 계속 진행된다.
4. 기능 플래그(Feature Flag) 기반 테스트 구성
신규 기능이 켜져 있을 때만 특정 조건을 테스트하고 싶을 때도 유용하다.
@Test
void testFeatureFlagScenario() {
boolean newFeatureOn = Boolean.getBoolean("feature.new.enabled");
assumingThat(newFeatureOn, () -> {
assertEquals("NEW", getFeatureResult());
});
// 기본 기능 검증은 항상 실행됨
assertEquals("OK", getDefaultResult());
}
설명
- 새 기능이 활성화된 환경에서만 해당 부분 테스트가 진행된다.
- 기능 플래그가 OFF여도 전체 테스트는 실패하지 않는다.
5. assumingThat()을 사용해야 하는 상황
- 테스트 내 일부 코드만 환경에 따라 실행해야 할 때
- OS, 환경 변수, 시스템 설정 등에 따라 “선택적 검증”을 진행하고 싶을 때
- 외부 리소스가 준비되지 않아도 전체 테스트를 스킵시키고 싶지 않을 때
- 기능 플래그에 따라 서로 다른 검증 경로가 필요한 경우
즉, 조건부 실행 + 전체 테스트 흐름 유지가 필요할 때 적합한 방법이다.
6. assumeTrue / assumeFalse와의 차이 정리
| 기능 | 동작 방식 | 테스트 전체 실행 여부 |
| assumeTrue() | 조건이 참일 때만 전체 테스트 실행 | 조건이 거짓이면 테스트 자체가 스킵됨 |
| assumeFalse() | 조건이 거짓일 때만 전체 테스트 실행 | 조건이 참이면 테스트 스킵 |
| assumingThat() | 조건이 참일 때만 일부 코드 실행 | 테스트는 항상 실행됨 |
특히 assumingThat()은 테스트 스킵을 유발하지 않는다는 점에서 매우 실용적이다.
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit5] TestInfo.getTags()로 태그 메타데이터 조회하기 (0) | 2026.01.20 |
|---|---|
| [JUnit5] TestInfo.getDisplayName() 사용 가이드 (0) | 2026.01.20 |
| [JUnit5] assumeFalse()로 조건 불만족 시 테스트 실행하기 (0) | 2026.01.19 |
| [JUnit5] assumeTrue()로 조건 만족 시 테스트 실행하기 (1) | 2026.01.18 |
| [JUnit5] ConditionEvaluationResult로 조건 평가 결과 처리하기 (0) | 2026.01.18 |
Comments
