Junit에서는 특정한 OS, JAVA 버전, 환경변수, 시스템변수 등 이러한 환경이나 조건에 따라 테스트 실행을 지원해주는 메서드가 존재한다.
바로 org.junit.jupiter.api.Assumeptions.* 에 해당하는
assumeTrue(조건)
assumeThat(조건, 테스트)
이다.
이러한 assume을 활용하여 특정 환경변수나 자바버전이나 이런 경우에 따라 테스트를 실행할 수 있다.
예를 봐보자.
@Test
@DisplayName("스터디 만들기 ")
void create_new_study() {
String test_env = System.getenv("TEST_ENV");
assumeTrue("LOCAL".equals(test_env));
System.out.prinln("LOCAL");
}
여기서 assumeTrue에서 true로 통과하여야 다음 테스트코드들이 실행하게 된다.
또한 assume에서는 조건이 일치할 때, 람다를 이용해 해당 테스트 블록을 작성하여 실행시킬 수 있는 메서드가 있는데 assumeThat이다.
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
class StudyTest {
@Test
@DisplayName("스터디 만들기 ")
void create_new_study() {
Map<String,String> env = new HashMap<>();
env.put("TEST_ENV", "LOCAL");
String test_env = env.get("TEST_ENV");
assumeTrue("LOCAL".equals(test_env));
assumingThat("LOCAL".equals(test_env), ()->{
System.out.println("LOCAL");
Study actual = new Study(10);
assertThat(actual.getLimit()).isGreaterThan(0);
});
assumingThat("PROD".equals(test_env), ()->{
System.out.println("PROD");
Study actual = new Study(10);
assertThat(actual.getLimit()).isGreaterThan(0);
});
}
}
위와 같이 작성하면, TEST_ENV라는 환경변수의 값이 LOCAL과 일치하기 때문에 해당 블록만 실행하게 된다.
이렇게 소스코드로 환경 조건에 따른 테스트를 실행하게 만들 수 있었다.
다음은, 어노테이션을 이용해 조건에 따른 테스트 실행을 알아보자.
@Enabled___
@Disabled___
- OnOs
- OnJre
- IfSystemProperty
- IfEnviromentVariable
- If
Enabled와 Disabled를 이용해 다양한 조건에 따른 테스트 몇가지를 알아보자.
OnOS
@Test
@DisplayName("스터디 만들기 ")
@EnabledOnOs({OS.WINDOWS, OS.MAC})
void create_new_study() {
Map<String,String> env = new HashMap<>();
env.put("TEST_ENV", "LOCAL");
String test_env = env.get("TEST_ENV");
System.out.println("LOCAL");
Study actual = new Study(10);
assertThat(actual.getLimit()).isGreaterThan(0);
}
위의 코드 같이 EnabledOnOS를 이용해 Windows나 Mac에서 실행시 킬 수 있다.
반대로 DisabledOnOS를 이용해 특정 OS에서 실행을 제외시킬 수 있다.
@Test
@DisplayName("스터디 만들기 ")
@DisabledOnOs({OS.WINDOWS, OS.MAC})
void create_new_study() {
Map<String,String> env = new HashMap<>();
env.put("TEST_ENV", "LOCAL");
String test_env = env.get("TEST_ENV");
System.out.println("LOCAL");
Study actual = new Study(10);
assertThat(actual.getLimit()).isGreaterThan(0);
}
OnJre
@Test
@DisplayName("스터디 만들기 ")
@EnabledOnJre(JRE.JAVA_11)
void create_new_study() {
Map<String,String> env = new HashMap<>();
env.put("TEST_ENV", "LOCAL");
String test_env = env.get("TEST_ENV");
System.out.println("LOCAL");
Study actual = new Study(10);
assertThat(actual.getLimit()).isGreaterThan(0);
}
@Test
@DisplayName("스터디 만들기 ")
@DisabledOnJre(JRE.JAVA_11)
void create_new_study() {
Map<String,String> env = new HashMap<>();
env.put("TEST_ENV", "LOCAL");
String test_env = env.get("TEST_ENV");
System.out.println("LOCAL");
Study actual = new Study(10);
assertThat(actual.getLimit()).isGreaterThan(0);
}
위와 같이 Java 버전에 따라서도 테스트 동작을 컨트롤 할 수 있다.
IfEnviromentVariable
@Test
@DisplayName("스터디 만들기 ")
@EnabledIfEnvironmentVariable(named="TEST_ENV", matches = "LOCAL")
void create_new_study() {
Study actual = new Study(10);
assertThat(actual.getLimit()).isGreaterThan(0);
}
아까 assume을 사용하여 환경변수를 조건으로 테스트를 실행한 소스를 위와같이 IfEnviromentVariable사용하여 대체할 수 있다. 환경변수에서 TEST_ENV가 LOCAL가 매치될 경우만 해당 테스트를 실행하게 된다.
'Framework > ✔️JUnit5' 카테고리의 다른 글
TDD를 위한 JUnit5 사용법 4 - 테스트 반복하기 (RepeatedTest, ParameterizedTest) (0) | 2022.09.06 |
---|---|
TDD를 위한 JUnit5 사용법 2 - Assertion (0) | 2022.08.15 |
TDD를 위한 JUnit5 사용법 1 - JUnit5 개요 및 Naming Annotation (0) | 2022.08.14 |
댓글