본문 바로가기

SearchDeveloper/애플리케이션테스트

Junit5 애노테이션 설명

JUnit5

이 글은 온라인 강의를 듣고 해당 내용을 직접 실습해보며 정리한 글입니다. 더 자세한 내용은 아래 강의에서 확인할 수 있습니다.

더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의(백기선)

 

@DisplayNameGeneration

: 클래스 안의 모든 테스트명 변경

@DisplayNameGeneration([테스트명 변경 규칙 클래스])

@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
@SpringBootTest
class StudyTest {
    @Test
    void create_new_test() {
        System.out.println("it is test");
    }
}

기본적으로 테스트명은 메소드명을 따릅니다. 클래스에 @DisplayNameGeneration 을 선언하면 설정한 규칙에 따라 테스트명을 변경해줍니다.

변경된 테스트명

DisplayNameGenerator.ReplaceUnderscores.class: 모든 테스트 메소드명에 언더바를 제거해줍니다.

@DisplayName

: 테스트명 변경

@DisplayName("테스트명")

@Test
@DisplayName("스터디_테스트_😂")
void create_new_test() {
    System.out.println("it is test");
}

메소드 단위에 선언하며 해당 테스트명을 변경합니다. @DisplayNameGeneration 보다 우선순위가 높습니다.

변경된 테스트명

@EnabledOnOs

: 특정 OS 에서만 테스트 수행

@EnabledOnOs([OS 클래스])

@Test
@EnabledOnOs({OS.WINDOWS, OS.LINUX}) // OS 에 특화된 테스트
public void window() {    System.out.println("WINDOW/LINUX TEST");}

@Test
@DisabledOnOs({OS.LINUX})
public void not_linux() {    System.out.println("LINUX TEST");}

@EnabledOnJre

: 특정 자바 버전 에서만 테스트 수행

@EnabledOnJre([JRE 클래스])

@Test
@EnabledOn Jre({JRE.JAVA_8, JRE.JAVA_9, JRE.JAVA_10, JRE.JAVA_11}) // 자바 버전 에 특화된 테스트
public void jre() {    System.out.println("JRE TEST");}

@EnabledIfEnvironmentVariable

: 특정 환경변수 에서만 테스트 수행

@EnabledIfEnvironmentVariable(named = [환경변수명], matches = [참이길 바라는 환경변수 값])

@Test
@EnabledIfEnvironmentVariable(named = "PROCESSOR_LEVEL", matches = "6") // 환경변수 에 특화된 테스트
public void env() {    System.out.println("env TEST");}

@Tags

: 테스트 그룹화. 하고 싶은 테스트만 선택해서 실행 가능

@Tag([그룹지을 태그명])

@Test
@Tag("fast")
public void tag() {
    System.out.println("fast");
}

수행을 원하는 테스트에만 @Tag를 선언합니다.

InteliJ Junit Configuration 에서 Tags 를 선택 후 직접 입력한 태그명인 fast를 입력합니다.

태그 설정

그리고 테스트를 실행하면, @Tag("fast") 가 붙은 테스트만 수행됩니다.

태그 붙은 테스트 수행

@RepeatedTest

: 테스트 반복 수행

@RepeatedTest([반복횟수])
@RepeatedTest(value = [반복횟수], name = "{displayName}, {currentRepetition} / {totalRepetitions}")

@RepeatedTest(5)
public void repeat() {
    System.out.println("repeat");
}

반복 테스트

@DisplayName("반복 테스트")
@RepeatedTest(value = 3, name = "{displayName}, {currentRepetition} / {totalRepetitions}")
public void repeat(RepetitionInfo repetitionInfo) {
    System.out.println("repeat: " + repetitionInfo.getCurrentRepetition() + "/" + repetitionInfo.getTotalRepetitions());
}

@RepeatedTest 안에서 예약된 변수명으로 정보를 얻을 수 있습니다.

  • {displayName} : 테스트명
  • {currentRepetition}: 현재 테스트 횟수
  • {totalRepetitions} : 전체 테스트 횟수

RepetitionInfo 객체를 인자로 받아 횟수 정보를 얻을 수 있습니다.

  • repetitionInfo.getCurrentRepetition() : 현재 테스트 횟수
  • repetitionInfo.getTotalRepetitions() : 전체 테스트 횟수

반복 테스트명 변경

@TestInstance(TestInstance.Lifecycle.PER_CLASS)

: 테스트 인스턴스 한 번만 생성

@SpringBootTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class StudyTest {...}

Junit5 는 기본 전략으로 테스트 메소드를 실행 할 때마다 테스트 인스턴스를 생성합니다. 각 테스트 간의 의존성을 방지하기 위함이죠. 하지만 테스트 클래스에 인스턴스 변수를 선언한다거나 테스트 간 의존성이 필요할 경우에는 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 로 테스트 인스턴스를 한 번만 생성하게 설정할 수 있습니다.

Junit5 애노테이션 설명

 

글 읽어주셔서 언제나 감사합니다. 좋은 피드백, 개선 피드백 너무나도 환영합니다.

 

연관글

https://elsboo.tistory.com/20

 

Junit5 Assertions / Assumptions 설명

이 글은 온라인 강의를 듣고 직접 실습해보며 정리한 글입니다. 더 자세한 내용은 아래 강의에서 확인할 수 있습니다. 더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런 | 강의 (백기선)

elsboo.tistory.com