상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - JUnit에서 조건부 테스트를 구현하는 방법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
JUnit에서 조건부 테스트(conditional test)를 구현하는 방법은 특정 조건에 따라 테스트의 실행 여부를 제어하는 기능을 말합니다. 예를 들어 환경 변수, 운영체제, 자바 버전, 특정 설정값 등에 따라서 테스트를 실행하거나 건너뛸 수 있습니다. JUnit 5에서는 이러한 조건부 테스트를 매우 유연하고 쉽게 구현할 수 있도록 여러 가지 기능과 애노테이션을 제공합니다. 아래에 JUnit에서 조건부 테스트를 구현하는 주요 방법들을 자세히 설명합니다. --- 1. `@EnabledIf` / `@DisabledIf` JUnit 5 부가 확장 기능인 JUnit Jupiter Params 나 외부 라이브러리를 통해 사용할 수 있는 방법이지만, 기본 JUnit 5에서는 직접 제공하지 않습니다. 하지만 조건식을 통해 실행 가능 여부를 평가하는 기능을 구현하려면 스크립트 언어나 커스텀 메서드를 통해 가능한 방법을 활용할 수 있습니다. --- 2. `@EnabledOnOs` / `@DisabledOnOs` 특정 운영체제에서만 테스트를 실행하거나 제외하고 싶을 때 사용하는 애노테이션입니다. ```java import org.junit.jupiter.api.condition.EnabledOnOs; import org.junit.jupiter.api.condition.OS; @EnabledOnOs(OS.WINDOWS) @Test void onlyOnWindows() { // 윈도우에서만 실행 } ``` 반대로 `@DisabledOnOs(OS.LINUX)` 등으로 특정 OS에서는 실행하지 않도록 할 수도 있습니다. --- 3. `@EnabledOnJre` / `@DisabledOnJre` 특정 자바 런타임 환경(JRE) 버전에서만 테스트를 실행하고자 할 때 씁니다. ```java import org.junit.jupiter.api.condition.EnabledOnJre; import org.junit.jupiter.api.condition.JRE; @EnabledOnJre(JRE.JAVA_11) @Test void onlyOnJava11() { // 자바 11 환경에서만 실행 } ``` --- 4. `@EnabledIfEnvironmentVariable` / `@DisabledIfEnvironmentVariable` 환경 변수에 따라서 조건부 테스트를 제어할 수 있습니다. 예를 들어, `CI=true` 인 경우에만 실행하거나 특정 API 키가 존재할 때만 실행하는 경우 사용됩니다. ```java import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; @EnabledIfEnvironmentVariable(named = "CI", matches = "true") @Test void onlyOnCiServer() { // CI 환경에서만 실행 } ``` --- 5. `@EnabledIfSystemProperty` / `@DisabledIfSystemProperty` 시스템 프로퍼티(System property)를 체크해서 조건부 테스트를 구현할 수 있습니다. ```java import org.junit.jupiter.api.condition.EnabledIfSystemProperty; @EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*") @Test void onlyOn64BitArch() { // 64비트 아키텍처에서만 실행 } ``` --- 6. `Assumptions` 클래스 이용하기 JUnit 5에서는 테스트 메서드 내에서 `Assumptions.assumeTrue()`, `assumeFalse()` 같은 메서드를 사용하여 특정 조건이 충족되지 않으면 테스트를 중단하고 무시 (Skipped) 처리합니다. ```java import static org.junit.jupiter.api.Assumptions.assumeTrue; @Test void testOnlyIfDatabaseAvailable() { boolean dbAvailable = <a href='https://sangseek.com/sangseeks/check/ko'>check</a>DatabaseConnection(); assumeTrue(dbAvailable, "Database is not available, test skipped"); // 이 아래 코드는 DB가 연결된 경우에만 실행됨 } ``` `Assumptions`를 사용하면 복잡한 조건을 커스텀 코드로 검사하여 테스트 실행을 동적으로 제어할 수 있습니다. --- 7. 커스텀 조건 클래스 구현 (`ExecutionCondition`) JUnit 5는 `org.junit.jupiter.api.extension.ExecutionCondition` 인터페이스를 구현하여 확장 포인트를 제공합니다. 이를 통해 매우 세밀한 커스텀 조건부 실행 로직을 작성할 수 있습니다. 예를 들어: ```java public class CustomExecutionCondition implements ExecutionCondition { @Override public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { // 조건 검사 로직, 예: 환경 변수 체크 String env = System.getenv("MY_ENV_VAR"); if ("enabled".equals(env)) { return ConditionEvaluationResult.enabled("Enabled because MY_ENV_VAR=enabled"); } else { return ConditionEvaluationResult.disabled("Disabled because MY_ENV_VAR is not enabled"); } } } ``` 이후 테스트 클래스에 `@ExtendWith(CustomExecutionCondition.class)`를 붙이면 조건에 따른 실행 제어가 가능해집니다. --- 요약 - OS, JRE, 환경변수, 시스템 프로퍼티 조건 제어를 위한 전용 애노테이션 존재 (`@EnabledOnOs`, `@EnabledOnJre`, `@EnabledIfEnvironmentVariable`, `@EnabledIfSystemProperty` 등) - 테스트 내에서 `Assumptions` API를 사용하여 실행 여부를 동적으로 판단하고 스킵 가능 - 복잡한 조건이 필요한 경우 `ExecutionCondition` 인터페이스를 구현하여 커스텀 확장 가능 --- 이러한 기능들을 적절히 활용하면 다양한 환경 및 조건에 따라 테스트 실행을 유연하게 제어할 수 있습니다. JUnit 5 버전부터 조건부 테스트가 훨씬 직관적이고 기능적으로 강화되었으므로, 가능하면 JUnit 5를 사용하여 이러한 조건부 테스트를 구성하는 것이 추천됩니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기