1- 개요
- Assertions와 Assumptions를 비교해보고자 함
2- 학습 내용 기반으로 차이점 요약
- Assertions은 테스트 실행 조건이 아닌 테스트 통과 조건에 초점된 클래스
- Assumptions는 테스트 실행 조건에 초점이 맞추어진 클래스
3- 비교
- Assertions
- 테스트 통과 조건을 통과하는지 확인할 때 사용
- 주요 메서드는 이전에 포스팅된 글 참고 - Assumptions
- 메소드별 조건에 따라 테스트 수행 여부 결정
- 주로 수행 OS, 환경변수, JRE 버전 등에 따른 조건을 입력함
- assumeTrue : 테스트 실패시 에러
- assumeFalse : 테스트 성공시 에러
- assumingThat( boolean, executable )
: 첫 번째 인자가 True면 두 번째 인자로 들어온 함수 수행
: 첫 번째 인자가 False이어도 이후 테스트를 스킵하지 않고 다음 코드 진행
- assumingThat 예시 코드
- Assumptions 활용 테스트 코드 예시
package me.jeongsky.inflearnthejavatest;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.*;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import static org.junit.jupiter.api.Assumptions.assumingThat;
@DisplayNameGeneration(DisplayNameGenerator.IndicativeSentences.class)
public class StudyTest_Condition {
/*
조건에 따라 테스트 코드 실행하기
- 여기서 명시한 조건: 특정 OS, 자바 버전, 환경 변수, 시스템 버전 등
- 위 예시에 따른 실행 여부 결정하기
*/
@Test
@DisplayName("테스트 환경 확인 테스트")
void createNewStudy() {
// org.junit.jupiter.api.Assumptions 에서 제공하는 메서드
// case 1. 테스트 환경이 로컬인 경우
String env = System.getenv("TEST_ENV");
System.out.println("env = " + env);
// parameter 로 받은 조건에 만족하는지 테스트
assumeTrue("LOCAL".equalsIgnoreCase(System.getenv("TEST_ENV")));
}
@Test
@DisplayName("특정 조건에 따른 테스트 수행")
void each_env_test() {
// 특정 조건에 만족한다면 이거
// -> 하늘 추측. 로컬 환경에서 접속하는 DB IP 확인에서 확인할수도 있고
assumingThat(
"LOCAL".equalsIgnoreCase(System.getenv("TEST_ENV")),
() -> {
System.out.println("LOCAL 환경");
Study study = new Study(10);
assertThat(study.getLimit()).isGreaterThan(0);
}
);
// 위에거가 아닌 다른 조건에 만족한다면 이 테스트
// -> 여기서 또 다른 거일수 있고
assumingThat(
"sky".equalsIgnoreCase(System.getenv("TEST_ENV")),
() -> {
System.out.println("sky 환경");
Study study = new Study(20);
assertThat(study.getLimit()).isGreaterThan(15);
}
);
}
// 위 내용은 Annotation으로 테스트 가능함
// case1. Mac OS
// @EnabledOnOs -> 특정 운영체제인 경우 실행
// @DisabledOnOs -> 특정 운영체제인 경우 비실행
@Test
@DisplayName("Mac인 경우 실행하는 테스트")
@EnabledOnOs(OS.MAC)
void doRunOnMac() {
assumingThat("LOCAL".equalsIgnoreCase(System.getenv("TEST_ENV")),
() -> {
Study study = new Study(2);
assertThat(study.getLimit()).isGreaterThan(0);
}
);
}
@Test
@DisplayName("Mac인 경우 실행하지 않는 테스트")
@DisabledOnOs(OS.MAC)
void doNotRunOnMac() {
assumingThat("LOCAL".equalsIgnoreCase(System.getenv("TEST_ENV")),
() -> {
Study study = new Study(15);
assertThat(study.getLimit()).isGreaterThan(10);
});
}
// case2. 여러 개의 운영체제를 대상으로 하는 경우
// 배열로 넘길 수 있음
@Test
@DisplayName("다수의 OS를 실행하는 경우")
@EnabledOnOs({OS.MAC, OS.LINUX})
void doRunOnMacOrLinux() {
String jreVersion = System.getenv("JAVA_HOME");
System.out.println("jreVersion = " + jreVersion);
System.out.println("Hello~~ Running on Mac Or Linux" );
}
// case3. 특정 자바 버전에 따른 실행
@Test
@DisplayName("자바 8 ~ 15 버전에 수행")
@EnabledOnJre({ JRE.JAVA_8, JRE.JAVA_9, JRE.JAVA_10, JRE.JAVA_11, JRE.JAVA_12, JRE.JAVA_13, JRE.JAVA_14, JRE.JAVA_15})
void doRunOnJre8to15() {
System.out.println("JRE 8 ~ 15");
}
@Test
@DisplayName("위 언급된 버전 외에 것들 수행")
@EnabledOnJre({JRE.OTHER})
void doRunOnJreOther() {
System.out.println("JRE 8 ~ 11 외 버전 수행");
}
// case4. 사용하고자 하는 환경 변수에 따른 테스트
// named : 환경 변수 key 값
// matches : key 값의 value 조건
@Test
@DisplayName("사용하고자 하는 환경 변수에 대한 테스트")
@EnabledIfEnvironmentVariable(named = "TEST_ENV", matches = "LOCAL")
void doRunValueIsLocal() {
String test_env = System.getenv("TEST_ENV");
System.out.println("test_env = " + test_env);
}
}
'Development > Application Test' 카테고리의 다른 글
[JUnit 5] Assertions의 사용 (0) | 2022.08.29 |
---|---|
[JUnit 5] 테스트 이름 표기하기 (0) | 2022.08.14 |
[JUnit] JUnit 5 (1) 소개 (0) | 2022.08.03 |