본문 바로가기
프로그래밍/테스트

[Junit5] Assertions과 Assumptions - Assumptions편

by 사바라다 2020. 5. 7.

안녕하세요. 오늘은 JUnit5의 3번째 시간입니다. 이번 포스트에서는 Assertions와 Assumption중 Assumptions에 대해서 좀 더 자세히 알아보는 시간을 가지도록 하겠습니다.

Assumptions

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

사전조건

테스트를 위한 사전 조건으로 사용하는 Class는 아래와 같습니다. 해당 Class는 사칙연산을 담당하는 클래스로 add, multiply, divide를 메서드로 가지고 있습니다.

private final Calculator calculator = new Calculator();

assumption 기본

assumeTrue 메서드는 파라미터의 값이 true일때 테스트를 계속 진행하겠다라는 의미입니다. 아래의 경우는 assumeTrue를 통과하기 때문에 아래의 assertThat 구문이 정상적으로 실행되는 것을 확인할 수 있습니다.


private String env = "local";

@Test
void testOnlyOnCiServer() {
    assumeTrue("local".equals(env));

    // remainder of test
    assertThat(calculator.add(1, 1)).isEqualTo(2);
}

하지만 만약 코드가 아래와 같이 되어있으면 어떻게 될까요? 이럴 경우 아래의 assertThat 구문은 실행되지 않습니다. 그렇다면 실패인 걸까요? 그렇지 않습니다. 아래의 구문은 assumeTrue 구문을 통과하지 못했기 때문에 @Disabled 구문과 동일하게 처리됩니다.


private String env = "dev";

@Test
void testOnlyOnCiServer() {
    assumeTrue("local".equals(env));

    // remainder of test
    assertThat(calculator.add(1, 1)).isEqualTo(2);
}

또한 console 메시지는 아래와같이 출력됩니다.

assumption message 추가

메시지 추가를 하는 방법은 아래와 같습니다. 파라미터로 String 또는 Supplier<String>을 파라미터로 받을 수 있는데 적용해 주면 됩니다. 아래는 Supplier<String>을 적용했습니다.

private String env = "dev";
@Test
void testOnlyOnCiServer() {
    assumeTrue("local".equals(env),
            () -> "Aborting test: not on developer workstation");
    // remainder of test

    assertThat(calculator.add(1, 1)).isEqualTo(2);
}

위와 같이 테스트 했을 경우의 겱과는 아래과 같습니다. 우리가 명시한 message가 출력된것을 확인할 수 있었습니다.

assumption 응용

assumingThat 구문을 이용하면 좀 더 응용하여 assumptions 구문을 만들 수 있습니다. 아래 코드는 assumingThat 구문을 사용한 것입니다.

private String env = "dev";

@Test
void testInAllEnvironments() {
    assumingThat("dev".equals(env),
        () -> {
            System.out.println("dev 환경");
            assertEquals(2, calculator.divide(4, 2));
        });

System.out.println("기타 환경");
    assertEquals(42, calculator.multiply(6, 7));
}

위 코드는 assumingThat 구문이 True압니다. 따라서 파라미터로 받은 함수형 파라미터가 실행됩니다. 따라서 실행결과는 아래와 같습니다.

dev 환경
기타 환경

만약 assumingThat 구문이 False라면 함수형 파라미터는 실행되지 않을것입니다. 따라서 실행결과는 아래과 같을 것입니다.

기타 환경

마무리

오늘은 이렇게 assumption 구문들에 대해서 몇가지 알아보았습니다.

감사합니다.

참조

JUni5 Guide Assumptions

댓글