테스트를 조건에 따라 실행하기

최준호·2022년 6월 29일
0

JUnit5

목록 보기
3/4
post-thumbnail

✍ 왜 테스트를 조건에 따라 실행해야할까?

테스트를 진행하면 로컬 환경, 테스트 환경, 실서버 환경을 고려해서 테스트 코드를 짜야한다. 로컬에서는 잘 돌아가고 테스트를 해야하는 코드인데 만약 실서버에서 실행이 되지 않을 코드를 작성한다면 실제 배포시에 환경이 다르기 때문에 에러가 나서 배포가 안될수도 있기 때문이다. 예를 들어 Window에서는 잘 돌아가지만 MAC이나 Linux 환경에서는 실행이 안될수도 있을 수 있다.

✅ assumeTrue()

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로 표시되어지지 않는다.

✅ assumimgThat()

다음으로는 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, @DisabledOnOs

이외에 어노테이션으로 제공해주는 기능들도 있는데 @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에서만 적용된 테스트가 실행되는 것을 확인할 수 있다.

✅ @EnabledOnJre, @DisabledOnJre

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()

@EnabledIfEnvironmentVariable(name="", match="")를 사용하여 name에 환경변수의 키값을 넣어주고 match에는 value값을 넣어주면 특정 환경변수 설정에서만 테스트를 진행하게 할수도 있다.

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글