Spring Boot/JUnit5

[JUnit5] Assumptions

수수한개발자 2022. 7. 21.
728x90

Assumptions

Assumption 구문은 테스트 메서드가 특정한 조건에 대해서 실행하고자 할 때 사용하는 구문입니다. JUnit5에서는 org.junit.jupiter.api.assumptions 패키지의 내용물로 사용할 수 있습니다.

assumeTrue 메서드는 파라미터의 값이 true일때 테스트를 계속 진행하겠다라는 의미입니다.

예를들어 특정한 OS, JAVA 버전, 환경변수에 따라 이러한 값에 따라 실행되어야한다. 실행되지 않아야 한다. 이런식으로 활용 할 수 있습니다.

저는 환경변수를 통해 테스트를 진행하였습니다.

이런식으로 환경변수를 하나 잡아줍니다. 그리고 인텔리제이를 껏다켜야합니다. 인텔리제이는 기본적으로 실행당시에 환경변수들을 읽어오기때문에 재부팅하지 않으면 인식하지 못할 수 도 있습니다.

 

@Test
@DisplayName("스터디 만들기 ╯°□°)╯")
void create_new_study() {
    String test_env = System.getenv("TEST_ENV");
    System.out.println("test_env = " + test_env);
    Assumptions.assumeTrue("LOCAL".equalsIgnoreCase(test_env));
    Study actual = new Study(10);
    assertEquals(actual.getLimit(), 10);
}

그리고 Assumptions.assumeTrue를 하게 되면 test_env가  위의 잡은 환경변수가 LOCAL일때만 밑의 테스트를 진행 하게 됩니다. 위의 코드는 성공한 케이스로 아래와 같이 나오게 됩니다.

test_env = LOCAL로 나오는 모습

이렇게 True일 떄는 잘 되지만 다른 컴퓨터에서는 test_env가 LOCAL2로 잡혀있거나 환경변수로 안잡혀있다면 아래와 같이 나오게 됩니다.

 

@Test
@DisplayName("스터디 만들기 ╯°□°)╯")
void create_new_study() {
    String test_env = System.getenv("TEST_ENV");
    System.out.println("test_env = " + test_env);
    Assumptions.assumeTrue("LOCAL2".equalsIgnoreCase(test_env));
    Study actual = new Study(10);
    assertEquals(actual.getLimit(), 10);
}

 

Disable한것처럼 무시하게 됩니다.

 

 @Test
    @DisplayName("스터디 만들기 ╯°□°)╯")
    void create_new_study() {
        String test_env = System.getenv("TEST_ENV");
        System.out.println("test_env = " + test_env);
        Assumptions.assumeTrue("LOCAL".equalsIgnoreCase(test_env));

        Assumptions.assumingThat("LOCAL".equalsIgnoreCase(test_env), () -> {
            System.out.println("loccal");
            Study actual = new Study(10);
            assertEquals(actual.getLimit(), 10);
        });

        Assumptions.assumingThat("TEST".equalsIgnoreCase(test_env), () -> {
            System.out.println("test");
            Study actual = new Study(10);
            assertEquals(actual.getLimit(), 10);
        });
    }

그리고 assumingThat은 조건이 이랬을때는 이렇게 하면서 테스트를 진행 할 수 도 있습니다.

그래서 test만뺴고 다 출력이 되는 모습입니다.

 

@Test
@DisplayName("스터디 만들기 ╯°□°)╯")
@EnabledOnOs({OS.LINUX, OS.MAC})
void create_new_study() {

또 메소드 위의 @EnabledOnOs 를하게되면 mac일때 linux일때 실행되게 할 수 있다.

@EnabledOnJre({JRE.JAVA_8, JRE.JAVA_9, JRE.JAVA_10, JRE.JAVA_11})

java 8, 9, 10 11버전일떄만 실행된다.

 

@EnabledIfEnvironmentVariable(named = "TEST_ENV", matches = "LOCAL")

위의 내용과 같지만 어노테이션으로 할 수 있습니다. TEST_ENV 가 LOCAL일떄 실행된다.

 

이와 반대 되는 의미로 @DisabledOnJRE, OS 가 있다.

728x90

'Spring Boot > JUnit5' 카테고리의 다른 글

[JUnit5] 테스트 순서  (0) 2022.07.22
[JUnit5] 테스트 인스턴스  (0) 2022.07.22
[JUint5] 테스트 반복하기  (0) 2022.07.22
[JUnit5] Assertion  (0) 2022.07.21
[JUnit 5] JUit5  (0) 2022.07.21

댓글