Tech/Test
JUnit 5 공식 레퍼런스
주지민
2021. 8. 25. 22:37
반응형
사내 스터디
JUnit5(5.7.2 버전 기준) 공식 레퍼런스 분석 페이지
https://junit.org/junit5/docs/current/user-guide/
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
반응형