일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kubernetes
- aws
- 오블완
- 정보처리기사 실기 기출문제
- kotlin spring
- Java
- PETERICA
- CKA 기출문제
- MySQL
- APM
- minikube
- kotlin coroutine
- mysql 튜닝
- AI
- 티스토리챌린지
- IntelliJ
- Pinpoint
- Elasticsearch
- CKA
- 기록으로 실력을 쌓자
- 공부
- AWS EKS
- 정보처리기사 실기
- 정보처리기사실기 기출문제
- 코틀린 코루틴의 정석
- kotlin
- CloudWatch
- kotlin querydsl
- Linux
- Spring
- Today
- Total
피터의 개발이야기
[Spring] JUnit5 조건부 테스트 실행방법 본문
ㅁ 개요
ㅇ 테스트를 진행 시 특정 조건에 맞추어 테스트를 실행해야 할 때가 있다.
ㅇ 예를 들어, 환경 변수, properties 설정 값, OS, JRE 버전 등에 따라 테스트를 실행할 필요가 있다.
ㅇ JUnit5는 이러한 조건에 맞춰 테스트를 실행할 수 있는 다양한 방법을 제공한다.
ㅇ 이번 글에서는 JUnit5의 조건에 따라 테스트를 실행하는 방법을 정리하였다.
ㅁ EnabledOnOs
// OsConditionTest
@Test
@EnabledOnOs(OS.WINDOWS)
fun test1() {
println("enabled on windows")
}
@Test
@EnabledOnOs(OS.MAC, OS.LINUX)
fun test2() {
println("enabled on mac");
}
@Test
@DisabledOnOs(OS.AIX, OS.SOLARIS, disableReason = "비활성화 이유를 적을 수 있다.")
fun test3() {
println("disabled on windows");
}
@Test
@DisabledOnOs(OS.MAC)
fun test4() {
println("disabled on mac");
}
ㅇ EnabledOnOs: 가능한 OS
ㅇ DisableOnOs: 불가능한 OS
ㅇ disableReason에 비활성화 이유를 적을 수 있다.
ㅇ 어노테이션에 OS 상수 값을 지정할 수 있고, 그 상수는 다음과 같다.
public enum OS {
AIX,
LINUX,
MAC,
SOLARIS,
WINDOWS,
OTHER;
// ...
ㅇ 로컬개발의 환경과 운영환경에 차이가 있다면, 이 조건부 테스트는 운영 테스트를 막을 수 있다.
ㅁ Java 버전
// Java 버젼 조건
@Test
@EnabledOnJre(JRE.JAVA_17)
fun jreTest1() {
println("enabled on java 17")
}
@Test
@EnabledOnJre(JRE.JAVA_17, JRE.JAVA_18)
fun jreTest2() {
println("enabled on java 17, 18")
}
@Test
@EnabledForJreRange(min = JRE.JAVA_8, max = JRE.JAVA_18)
fun jreTest3() {
println("enabled on java 8~18")
}
@Test
@DisabledOnJre(JRE.JAVA_8, JRE.JAVA_9)
fun jreTest4() {
println("disabled on java 8,9")
}
@Test
@DisabledForJreRange(min = JRE.JAVA_8, max = JRE.JAVA_18)
fun jreTest5() {
println("disabled on java 8~18")
}
ㅇ JAVA 버젼에 따라 조건부로 테스트를 수행할 수 있다.
ㅁ 시스템 속성
// SystemProperty
@Test
@EnabledIfSystemProperty(named = "java.vendor", matches = "AdoptOpenJDK")
fun systemTest1() {
println("enabled if AdoptOpenJDK");
}
@Test
@EnabledIfSystemProperty(named = "java.vendor", matches = "Oracle.*")
fun systemTest2() {
println("enabled if Oracle");
}
@Test
@DisabledIfSystemProperty(named = "java.vendor", matches = "AdoptOpenJDK")
fun systemTest3() {
println("disabled if AdoptOpenJDK");
}
@Test
@DisabledIfSystemProperty(named = "java.vendor", matches = "Oracle.*")
fun systemTest4() {
println("disabled if Oracle");
}
ㅇ named: 시스템 속성의 이름
ㅇ matches: 조건이 되는 값을 정규 표현으로 지정한다. 전체가 일치해야함.
ㅁ 환경 변수
// EnvironmentVariable
@Test
@EnabledIfEnvironmentVariable(named = "JAVA_HOME", matches = "AdoptOpenJDK")
fun evTest1() {
println("enabled if AdoptOpenJDK")
}
@Test
@EnabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*\\\\OpenJDK\\\\.*")
fun evTest2() {
println("enabled if OpenJDK")
}
@Test
@DisabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*\\\\AdoptOpenJDK\\\\.*")
fun evTest3() {
println("disabled if AdoptOpenJDK")
}
@Test
@DisabledIfEnvironmentVariable(named = "JAVA_HOME", matches = ".*\\\\OpenJDK\\\\.*")
fun evTest4() {
println("disabled if OpenJDK")
}
ㅇ named: 환경변수의 이름
ㅇ matches: 조건이 되는 값을 정규 표현으로 지정한다. 전체가 일치해야함.
ㅁ 스크립트 기반 조건
@Test
@EnabledIf("'FR' == systemProperty.get('user.country')")
fun onlyFrenchPeopleWillRunThisMethod() {
println("enabled if onlyFrenchPeopleWillRunThisMethod")
}
@Test
@DisabledIf("java.lang.System.getProperty('os.name').toLowerCase().contains('mac')")
fun shouldNotRunOnMacOS() {
println("disabled if mac os")
}
ㅇ 값 – 실행할 실제 스크립트가 포함되어 있다.
ㅇ 엔진(선택 사항) – 사용할 스크립팅 엔진을 지정한다. 기본값은 Oracle Nashorn 이다.
ㅇ 이유(선택 사항) – 로깅 목적으로 테스트가 실패할 경우 JUnit이 인쇄해야 하는 메시지를 지정한다.
ㅁ Assumptions 클래스
import static org.junit.jupiter.api.Assumptions.*;
@Test
fun trueAssumption() {
assumeTrue(5 > 1)
assertEquals(5 + 2, 7)
}
@Test
fun falseAssumption() {
assumeFalse(5 < 1)
assertEquals(5 + 2, 7)
}
@Test
fun assumptionThat() {
val someString = "Just a string"
assumingThat(
someString == "Just a string"
) { assertEquals(2 + 2, 4) }
}
ㅇ Assumptions은 특정 조건이 충족되는 경우에만 테스트를 실행하는 데 사용된다.
ㅇ 이는 일반적으로 테스트가 제대로 실행되는 데 필요하지만 테스트 중인 항목과 직접적인 관련이 없는 외부 조건에 사용된다.
ㅇ submitTrue() , acquireFalse() 및 assumingThat() 을 사용하여 가정을 선언할 수 있다.
ㅁ 함께 보면 좋은 사이트
ㅇ JUnit 5 Conditional Test Execution with Annotations
ㅇ JUnit5 조건부 테스트 - @EnabledOnOs, @EnabledOnJre, @EnabledIfEnvironmentVariable
'Programming > Spring' 카테고리의 다른 글
[Spring] Gradle 프로젝트에서 테스트를 스킵하는 방법 (0) | 2024.07.03 |
---|---|
[QueryDSL] fetchFirst()와 fetchOne()의 차이 (0) | 2024.06.29 |
[Spring] Junit 테스트 시 자동 Rollback 설정방법 (0) | 2024.06.26 |
[Spring] 패치조인(fetchJoin)이란? (0) | 2024.06.23 |
[Spring] Ktlint란, 코딩 컨벤션 (0) | 2024.06.22 |