-
조건에 따라 테스트 실행하기테스트/Junit5 2021. 2. 2. 14:27
특정한 운영체제의 환경변수, 환경에 따라 테스트를 실행하는 여부를 지정할 수 있다.
특정한 환경에서 조건을 검사하는 메서드와 어노테이션은 다음과 같다.
메서드
패키지명 : org.junit.jupiter.api.Assumptions.*
메서드: assumeTrue(조건), asummingThat(조건,테스트), assumeThat(조건, 테스트)
조건이 만족하면 다음 테스트코드나, 메서드 매개변수로 작성한 테스트코드를 실행한다. -> 말로하면 어려우니 예제코드를 보자.
어노테이션
@Enabled
@Disabled
- onOS
- OnJre
- IfEnvironmentVariable
예제 코드를 보면서 이해해보자.
예제코드1. 환경변수 설정후 테스트하기
본인은 맥OS를 사용하기 때문에 IntelliJ IDE 터미널 환경에서 bash_profile에 TEST_ENV란 환경변수를 설정해 주었다.
환경변수를 설정한 후 테스트 코드를 다음과 같이 작성해보자.
import static org.junit.jupiter.api.Assumptions.assumeTrue; @DisplayName("스터디 클레스") class StudyTest { @Test @DisplayName("스터디 만들기☺️") void create_new_study_test() { String test_env = System.getenv("TEST_ENV"); //환경변수를 받환 System.out.println(test_env); assumeTrue("LOACAL".equalsIgnoreCase(test_env)); System.out.println("LOCAL환경변수입니다."); } }
assumeTrue메서드에서 환경변수가 LOCAL(대소구문자 상관없이)인지 확인한다.
만약 TEST_ENV가 LOCAL이 아닌경우엔? -> 당연히 assumeTrue는 in not true가 되고 밑에 테스트코드가 실행되지 않는다.
@DisplayName("스터디 클레스") class StudyTest { @Test @DisplayName("스터디 만들기☺️") void create_new_study_test() { String test_env = System.getenv("TEST_ENV"); //환경변수를 받환 System.out.println(test_env); assumeTrue("NOT_LOCAL".equalsIgnoreCase(test_env)); System.out.println("LOCAL환경변수입니다."); } }
예제코드2. assumingThat 사용하기
먼저 소스코드를 보기 전에 아래 설정값을 잘 확인해주자.
주의사항 : Intellij에선 실행할 당시 bash_profile파일을 읽어들이기 때문에, Intellij에서 설정한 환경변수 값이 바로 적용되지 않는다. -> 다시 껏다가 켜주어야함.
@DisplayName("스터디 클레스") class StudyTest { @Test @DisplayName("스터디 만들기☺️") void create_new_study_test() { String test_env = System.getenv("TEST_ENV"); System.out.println(test_env); } }
변경되지 않은 값을 출력한다. 이부분을 고려해서 assumingThat(조건, 테스트) 테스트코드를 작성해보자
@DisplayName("스터디 클레스") class StudyTest { @Test @DisplayName("스터디 만들기☺️") void create_new_study_test() { String test_env = System.getenv("TEST_ENV"); //환경변수를 받환 System.out.println(test_env); assumingThat("LOCAL".equalsIgnoreCase(test_env),()->{ System.out.println("LOCAL환경변수입니다."); }); assumingThat("SeongJun".equalsIgnoreCase(test_env),()->{ System.out.println("SeongJun환경변수입니다."); }); } }
TEST_ENV의 값은 local이다.
따라서 assumingThat조건을 만족하는 첫번째 테스트만 실행한다.
예제코드3. 에노테이션 사용해서 특정 운영체제에서만 동작하거나 동작하지 않는 테스트코드 설정하기
@EnabledOnOS어노테이션에 전달할 값 목록이다. 리눅스, 윈도우, 맥 등등 여러가지가 많다.
만약 OS가 맥인경우 테스트코드를 실행하려면 다음과 같이 작성하자.
import org.junit.jupiter.api.condition.EnabledOnOs; import org.junit.jupiter.api.condition.OS; import static org.junit.jupiter.api.Assumptions.assumingThat; @DisplayName("스터디 클레스") class StudyTest { @Test @DisplayName("스터디 만들기☺️") @EnabledOnOs(OS.MAC) void create_new_study_test() { String test_env = System.getenv("TEST_ENV"); //환경변수를 받환 System.out.println(test_env); assumingThat("LOCAL".equalsIgnoreCase(test_env),()->{ System.out.println("LOCAL환경변수입니다."); }); assumingThat("SeongJun".equalsIgnoreCase(test_env),()->{ System.out.println("SeongJun환경변수입니다."); }); } }
다음 예제도 보자
@DisplayName("스터디 클레스") class StudyTest { @Test @DisplayName("스터디 만들기☺️") @EnabledOnOs(OS.MAC) void create_new_study_test() { String test_env = System.getenv("TEST_ENV"); //환경변수를 받환 System.out.println(test_env); } @Test @DisabledOnOs(OS.MAC) void create_again_study_test(){ System.out.println("다른 테스트 "); } }
OS가 맥일경우엔 DisabledonOS에너테이션을 적용해 주었기때문에 실행되지 않은 것을 볼 수 있다.
그외 다양한 환경에 조건을 주는 방법은 계속되는 예조코드를 보자.
예제코드4. 자바 버전에 따른 테스트코드 실행 여부(@enabledonJre, @disabledonJre)코드
본인은 자바 8버전을 사용하고 있다.
@DisplayName("스터디 클레스") class StudyTest { @Test @DisplayName("스터디 만들기☺️") @EnabledOnJre(JRE.JAVA_8) void create_new_study_test() { String test_env = System.getenv("TEST_ENV"); //환경변수를 받환 System.out.println(test_env); } @Test @DisabledOnJre(JRE.JAVA_8) void create_again_study_test(){ System.out.println("다른 테스트 "); } }
만약 제약하는 버전을 추가하고 싶다면 다음과 같이 작성한다.
@EnabledOnJre({JRE.JAVA_8,JRE.JAVA_9,JRE.JAVA_10})
자바 7버전 이하 다른 버전은 다음과 같이 사용한다.
@DisabledOnJre(JRE.OTHER)
예제코드5. @IfEnvironmentVariable
앞에서 살펴보았던 예제코드1에서 환경변수 조건에 따라 assumeTrue와 assumingThat메서드를 이용해 테스트를 실행 시키는 구문을 작성했는데, 이번엔 에노테이션을 사용한 방법으로 실시한다.
(+)예제코드 1,2를 보았다면 TEST_ENV환경변수 값이 변경된 것을 알 수 있겠는데, 본인은 아직 IDE를 재시작하지 않아 변경되지 않은 값(local)로 설정되어 있다.
@DisplayName("스터디 클레스") class StudyTest { @Test @DisplayName("스터디 만들기☺️") @EnabledIfEnvironmentVariable(named = "TEST_ENV",matches = "local") void create_new_study_test() { String test_env = System.getenv("TEST_ENV"); //환경변수를 받환 System.out.println(test_env); } @Test @DisabledIfEnvironmentVariable(named = "TEST_ENV",matches = "local") void create_again_study_test(){ System.out.println("다른 테스트 "); } }
'테스트 > Junit5' 카테고리의 다른 글
커스텀 태그 (0) 2021.02.02 태깅과 필터링 (0) 2021.02.02 Assertion API (0) 2021.01.28 테스트 이름 표시하기 (0) 2021.01.28 Junit 기본 어노테이션 (0) 2021.01.27