Tech/Test

JUnit 5 공식 레퍼런스

주지민 2021. 8. 25. 22:37
반응형

사내 스터디 

JUnit5(5.7.2 버전 기준) 공식 레퍼런스 분석 페이지

https://junit.org/junit5/docs/current/user-guide/

 

JUnit 5 User Guide

Although the JUnit Jupiter programming model and extension model will not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and cus

junit.org


1. Assumptions

  • JUnit Jupiter는 JUnit 4가 제공하는 가정 메서드의 하위 집합과 함께 제공
  • Java 8 람다 표현식 및 메서드 참조와 함께 사용하기에 적합한 몇 가지를 추가합니다. 
  • org.junit.jupiter.api.Assumptions 패키지
  • 주어진 조건(파라미터)가 {...}일때를 가정하여 나머지 테스트를 진행, 아니라면 Ignore 처리된다

 

assumeTrue

  • 주어진 조건(파라미터)가 True일때를 가정하여 True라면 나머지 테스트를 진행, 아니라면 Ignore 처리된다

 

예제 #1

/**
 * Validate the given assumption.
 *
 * @param assumption the assumption to validate
 * @throws TestAbortedException if the assumption is not {@code true}
 */
public static void assumeTrue(boolean assumption) throws TestAbortedException {
	assumeTrue(assumption, "assumption is not true");
}
// my assumeTrue test
public class jupiterAssumptions {

    private final String env = "dev";

    @Test
    void assumeTrueTest1() {
        assumeTrue(env.equals("local"));
        assertThat("hi1".equals("hi1")).isTrue();
    }

    @Test
    void assumeTrueTest2() {
        assumeTrue(env.equals("dev"));
        assertThat("hi2".equals("hi2")).isTrue();
    }
}

 

 

예제 #2

/**
 * Validate the given assumption.
 *
 * @param assumptionSupplier the supplier of the assumption to validate
 * @throws TestAbortedException if the assumption is not {@code true}
*/
public static void assumeTrue(BooleanSupplier assumptionSupplier) throws TestAbortedException {
	assumeTrue(assumptionSupplier.getAsBoolean(), "assumption is not true");
}
// my custom test
@Test
void assumeTrueTest1() {
	assumeTrue(() -> true);
}

@Test
void assumeTrueTest2() {
	assumeTrue(() -> false, "false message");
}

 

 

 

assumeFalse

  • 주어진 조건(파라미터)가 false일때를 가정하여 false라면 나머지 테스트를 진행, 아니라면 Ignore 처리된다
  • 오버로딩으로 지원되는 같은 이름의 메서드는 assumeTrue와 같다
/**
 * Validate the given assumption.
 *
 * @param assumption the assumption to validate
 * @throws TestAbortedException if the assumption is not {@code false}
*/
public static void assumeFalse(boolean assumption) throws TestAbortedException {
	assumeFalse(assumption, "assumption is not false");
}
// my custom test
@Test
void assumeFalseTest1() {
	assumeFalse(env.equals("local"));
	assertThat("hi".equals("hi")).isTrue();
}

 

 

assumingThat

  • 첫번째 인자 조건이 부합할 때 두번째 인자 조건을 만족시키는 경우 테스트를 통과 시킨다
  • 첫번째 인자 조건이 부합하지 않으면 테스트 통과
/**
 * Execute the supplied {@link Executable}, but only if the supplied
 * assumption is valid.
 *
 * <p>If the assumption is invalid, this method does nothing.
 *
 * <p>If the {@code executable} throws an exception, it will be rethrown
 * <em>as is</em> but  {@link ExceptionUtils#throwAsUncheckedException masked}
 * as an unchecked exception.
 *
 * @param assumptionSupplier the supplier of the assumption to validate
 * @param executable the block of code to execute if the assumption is valid
 * @see #assumingThat(boolean, Executable)
*/
public static void assumingThat(BooleanSupplier assumptionSupplier, Executable executable) {
	assumingThat(assumptionSupplier.getAsBoolean(), executable);
}
// my custom test
@Test
void assumeThatTest1() {
	assumingThat(env.equals("local"),
                 () -> assertThat("hi".equals("hi2")).isTrue());

	assertThat("hi".equals("hi")).isTrue();
}

 

 

번외: AssertJ.assumeThat

// my custom test
@Test
void assertJassumeThatTest() {
    assumeThat(env).isEqualTo("dev");
    assertThat("hi".equals("hi")).isTrue();
}

 

 

 

2. Disabled

  • 테스트를 생략할 수 있다
  • 속성중 value를 이용해 테스트를 생략하는 이유를 설명할 수 있다
// my custom test
@Test
void testSuccess() {
	assertThat("hi").isEqualTo("hi");
}

@Disabled("안하는 테스트")
@Test
void testFailed() {
	assertThat("hi").isEqualTo("hi2");
}

 

 

3. Conditional Test Execution

  • 각종 조건에 따라 테스트 실행 컨디션을 조절할 수 있다
  • OS별
    // my custom test    
    @EnabledOnOs(OS.MAC)
    @Test
    void testMac() {
        String os = "mac";
        System.out.println(os);
    }
    
    @EnabledOnOs(OS.WINDOWS)
    @Test
    void testWindow() {
        String os = "windows";
        System.out.println(os);
    }​


  • JRE별
    // my custom test
    @EnabledOnJre(JRE.JAVA_8)
    @Test
    void testJava8() {
        String jre = "java8";
        System.out.println(jre);
    }
    
    @EnabledOnJre(JRE.JAVA_11)
    @Test
    void testJava11() {
        String jre = "java11";
        System.out.println(jre);
    }
    
    @EnabledForJreRange(min = JRE.JAVA_8, max = JRE.JAVA_11)
    @Test
    void testJava8to11() {
        String jre = "java8~11";
        System.out.println(jre);
    }​



  • System property별
    • JVM system property를 이용
    • @EnabledIfSystemProperty(named = "os.arch", matches = ".*64.*")
    • @DisabledIfSystemProperty(named = "ci-server", matches = "true")

 

  • Environment Variable
    • 운영 체제의 환경변수
    • @EnabledIfEnvironmentVariable(named = "ENV", matches = "staging-server")
    • @DisabledIfEnvironmentVariable(named = "ENV", matches = ".*development.*")

 

  • Custom Conditions
    // my custom test
    @Test
    @EnabledIf("customCondition")
    void enabled() {
        System.out.println("enabled");
    }
    
    @Test
    @DisabledIf("customCondition")
    void disabled() {
        System.out.println("disabled");
    }
    
    boolean customCondition() {
        return true;
    }​



728x90
반응형