Junit5의 Assumptions, @Enabled/@Disabled 에 대해서 알아보도록 하겠습니다.
이 글은 백기선님 더 자바, 애플리케이션을 테스트하는 다양한 방법을 정리한 글입니다.
더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의
자바 프로그래밍 언어를 사용하고 있거나 공부하고 있는 학생 또는 개발자라면 반드시 알아야 하는 애플리케이션을 테스트하는 다양한 방법을 학습합니다., 그냥 개발자를 넘어 '더 나은 개발
www.inflearn.com
Assumptions
테스트 실행 전에 특정 조건을 검사하고, 조건이 충족되지 않으면 해당 테스트를 건너뛰도록 하는 데 사용하는 기능입니다.
Assumptions에는 3가지 메소드가 있습니다
- assumeTrue
- assumeFalse
- assumingThat
assumeTrue/assumeFalse
assumeTrue은 조건이 안맞을 경우 밑에 있는 테스트를 건너뛰고 다음테스트로 이동하게 됩니다.
assumeFalse은 조건이 맞을 경우 밑에 있는 테스트를 건너뛰고 다음테스트로 이동하게 됩니다.
둘의 내용이 비슷하므로 assumeTrue만 진행해보도록 하겠습니다.
@Test
@DisplayName("assumeTrue 테스트")
void assumeTrueTest(){
assumeTrue("LOCA".equalsIgnoreCase(System.getenv("TEST_ENV")));
System.out.println(System.getenv("TEST_ENV"));
Study study = new Study(10);
assertThat(study.getLimit()).isGreaterThan(0);
}
System.getenv는 설정해놓은 시스템 환경 변수를 가져오는 기능입니다.
TEST_ENV를 LOCAL로 설정해 두었고 조건에 맞지 않으므로 밑에 있는 것은 실행되지 않습니다.
assumingThat
assumingThat 파라미터가 2개입니다. 첫번째 파라미터는 조건, 두번째 파라미터는 테스트할 내용입니다.
조건이 맞지 않는 경우 테스트를 실행하지 않습니다.
@Test
@DisplayName("assumingThat 테스트")
void assumingThatTest(){
assumingThat("LOCA".equalsIgnoreCase(System.getenv("TEST_ENV")), () -> {
System.out.println(System.getenv("TEST_ENV"));
Study study = new Study(10);
assertThat(study.getLimit()).isGreaterThan(0);
});
System.out.println(System.getenv("TEST_ENV"));
}
assumeTrue assumingThat 차이점
assumeTrue와 assumingThat의 차이점은 뭘까요?
그것은 assumeTrue는 조건이 맞지 않으면 테스트를 건너뛰고 assumingThat의 경우 인자로 넘겨준 테스트만 진행하지 않는것입니다.
위에 결과들을 보면 assumeTrue는 'TEST_ENV'가 출력되지 않지만 assumingThat 'TEST_ENV가 출력 되는 것을 볼 수 있습니다.
그렇다면 왜 이렇게 차이가 나는 걸까요?
먼저 assumeTrue를 살펴 보겠습니다.
public static void assumeTrue(boolean assumption, String message) throws TestAbortedException {
if (!assumption) {
throwAssumptionFailed(message);
}
}
private static void throwAssumptionFailed(String message) {
throw new TestAbortedException(
StringUtils.isNotBlank(message) ? "Assumption failed: " + message : "Assumption failed");
}
assumeTrue의 경우 TestAbortedException로 Exception을 던저주는 것을 볼 수 있습니다.
그렇기 때문에 테스트가 더 이상 진행되지 않고 건너뛰게 됩니다.
그리고 assumingThat 살펴보면
public static void assumingThat(boolean assumption, Executable executable) {
if (assumption) {
try {
executable.execute();
}
catch (Throwable t) {
ExceptionUtils.throwAsUncheckedException(t);
}
}
}
assumingThat의 경우 try/catch로 묶여 있어 조건이 맞지 않아도 아래 코드에 assumingThat 영향을 주지 않는 것을 볼 수 있습니다.
@Enabled/@Disabled
@Enabled/@Disabled 는 조건에 따라 테스트를 진행하거나 진행하지 않는 애노테이션입니다.
@Enabled/@Disabled는 각각 5개의 애노테이션이 있습니다.
- @EnabledOnOs/@DisabledOn
- @EnabledOnJre/@DisabledJre
- @EnabledIfSystemProperty/@DisabledIfSystemProperty
- @EnabledIfEnvironmentVariable/@DisabledIfEnvironmentVariable
- @EnabledIf/@DisabledIf
@Enabled/@Disabled가 기능이 비슷해 @Enabled만 알아보도록 하겠습니다.
@EnabledOnOs
OS가 조건에 맞는 경우 테스트를 진행합니다.
@Test
@DisplayName("enabledOs 테스트")
@EnabledOnOs(OS.MAC)
void enabledOsTest(){
System.out.println("MAC");
}
@EnabledOnJre
JRE가 조건에 맞는 경우 테스트를 진행합니다
@Test
@DisplayName("enabledJre 테스트")
@EnabledOnJre(JRE.JAVA_17)
void enabledJreTest(){
System.out.println("Jre11");
}
@EnabledIfSystemProperty
자바 버전이 조건에 맞는 경우 테스트를 진행합니다.
@Test
@DisplayName("EnabledIfEnvironmentVariable 테스트")
@EnabledIfSystemProperty(named = "java.version" , matches = "17.0.6")
void enabledIfSystemPropertyTest(){
System.out.println(System.getProperty("java.version"));
}
@EnabledIfEnvironmentVariable
환경 변수가 조건에 맞는 경우 테스트를 진행합니다.
@Test
@DisplayName("EnabledIfEnvironmentVariable 테스트")
@EnabledIfEnvironmentVariable(named = "TEST_ENV", matches = "LOCAL")
void enabledIfEnvironmentVariableTest(){
System.out.println(System.getenv("TEST_ENV"));
}
@EnabledIf
메소드의 조건이 참일 경우 테스트를 진행합니다.
@Test
@DisplayName("EnabledIf 테스트")
@EnabledIf("conditionTrue")
void enabledIfTest(){
System.out.println("EnabledIf");
}
boolean conditionTrue(){
return true;
}
같은 클래스에 있지 않고 다른 클래스에 있는 메소드를 사용할 경우 클래스의 경로를 모두 넘겨주어야합니다.
조건에 따라 테스트 하는 방법에 대해서 알아보았습니다.
테스트 조건을 이렇게 다양하게 비교해볼 수 있다는 점을 알았습니다.
특히 assumeTrue,assumingThat 같은 경우에는 테스트 할 때 많이 유용할 것이라고 예상되어집니다.
감사합니다.
GitHub - kibongcoders/junit5
Contribute to kibongcoders/junit5 development by creating an account on GitHub.
github.com
더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의
자바 프로그래밍 언어를 사용하고 있거나 공부하고 있는 학생 또는 개발자라면 반드시 알아야 하는 애플리케이션을 테스트하는 다양한 방법을 학습합니다., 그냥 개발자를 넘어 '더 나은 개발
www.inflearn.com
'Java > 더 자바, 애플리케이션을 테스트하는 다양한 방법' 카테고리의 다른 글
Junit5 테스트 인스턴스, 테스트 순서 (0) | 2023.09.12 |
---|---|
Junit5 테스트 반복하기 (0) | 2023.09.12 |
Junit5 태깅, 필터링 Tagging, Filtering (0) | 2023.09.11 |
Junit5 Assertion (0) | 2023.09.08 |
Junit5, 시작하기 (0) | 2023.09.08 |