테스트를 진행하면 로컬 환경, 테스트 환경, 실서버 환경을 고려해서 테스트 코드를 짜야한다. 로컬에서는 잘 돌아가고 테스트를 해야하는 코드인데 만약 실서버에서 실행이 되지 않을 코드를 작성한다면 실제 배포시에 환경이 다르기 때문에 에러가 나서 배포가 안될수도 있기 때문이다. 예를 들어 Window에서는 잘 돌아가지만 MAC이나 Linux 환경에서는 실행이 안될수도 있을 수 있다.
assumeTrue(boolean)를 사용하여 테스트를 중도에 멈추에 할 수 있다.
public class IfTest {
static String VALUE = "TEST";
@Test
@DisplayName("조건 테스트")
void assumeTest(){
assumeTrue("TEST".equals(VALUE));
System.out.println("조건 테스트");
}
@Test
@DisplayName("무조건 실행")
void test(){
System.out.println("무조건 실행되는 테스트");
}
}
다음과 같이 테스트를 진행하게 한다고 해보자. 전체 테스트를 진행했을 때 조건 테스트는 조건에 따라 실행이 안될것이고 무조건 실행 테스트는 무조건 실행이 된다.
이렇게 모두 실행이 된다. 이제 조건을 다르게 줘보자.
public class IfTest {
static String VALUE = "TEST";
@Test
@DisplayName("조건 테스트")
void assumeTest(){
assumeTrue("실행 안됨".equals(VALUE));
System.out.println("조건 테스트");
}
@Test
@DisplayName("무조건 실행")
void test(){
System.out.println("무조건 실행되는 테스트");
}
}
다음과 같이 실행이 안되도록 값을 수정하고 테스트를 진행하면
조건이 실패해서 실행이 안되었다는 표시와 함께 콘솔에도 에러 메세지가 표시되어진다. 하지만 fail로 표시되어지지 않는다.
다음으로는 assumeThat(booleanSupplier, executable)이 있는데.
public class IfTest {
static String VALUE = "TEST";
...
@Test
@DisplayName("조건 테스트2")
void assumeThat(){
assumingThat("실행 안됨".equals(VALUE), ()-> System.out.println("실행"));
assumingThat("TEST".equals(VALUE), ()-> System.out.println("실행"));
}
}
다음과 같이 테스트를 내부에서 조건에 따라 나누어서 진행할 수 있도록 해준다. 조건 자체가 성립되지 않으면 코드가 실행되지 않으므로 에러로 표시되지도 않는다.
이외에 어노테이션으로 제공해주는 기능들도 있는데 @EnabledOnOs을 사용하여 특정 OS에서만 실행할 수 있도록 테스트를 작성할 수도 있다.
@DisabledOnOs를 사용하여 특정 OS에서는 테스트를 실행하지 않도록 설정할 수도 있다.
public class IfTest {
...
@Test
@DisplayName("window만 실행")
@EnabledOnOs(value = OS.WINDOWS)
void window(){
System.out.println("윈도우 테스트입니다.");
}
@Test
@DisplayName("window만 실행")
@DisabledOnOs(value = OS.WINDOWS)
void disabledWindow(){
System.out.println("윈도우에서는 실행하지 않을 테스트입니다..");
}
@Test
@DisplayName("linux, max만 실행")
@EnabledOnOs(value = {OS.MAC, OS.LINUX})
void mac(){
System.out.println("mac, linux 테스트입니다.");
}
}
다음 테스트들을 진행하면 window에서만 적용된 테스트가 실행되는 것을 확인할 수 있다.
public class IfTest {
...
@Test
@DisplayName("java11에서만 실행")
@EnabledOnJre(value = {JRE.JAVA_11})
void java11(){
System.out.println("java 11에서만 실행");
}
@Test
@DisplayName("java11 외 실행")
@DisabledOnJre(value = {JRE.JAVA_11})
void disabledJava11(){
System.out.println("java 11 외 실행");
}
@Test
@DisplayName("java11 외 실행")
@EnabledOnJre(value = {JRE.JAVA_8, JRE.JAVA_18})
void disabledJava8(){
System.out.println("java 8, 11에서만 실행");
}
}
OS와 동일하게 특정 Java version에 따라 실행할 수도 있다.
@EnabledIfEnvironmentVariable(name="", match="")를 사용하여 name에 환경변수의 키값을 넣어주고 match에는 value값을 넣어주면 특정 환경변수 설정에서만 테스트를 진행하게 할수도 있다.