이 글은 인프런 - 더 자바, 애플리케이션을 테스트하는 다양한 방법 강의를 학습하며 정리한 내용입니다.
www.inflearn.com/course/the-java-application-test
( intellij에서 JUnit5의 설정이 완료되었다는 가정하에 글을 작성합니다. )
(때문에 JUnit5 사용방법을 모르시는 분들은 다음글을 참고해 주세요. scshim.tistory.com/175 )
@Tag, 테스트의 태깅과 필터링
테스트 그룹을 만들고 원하는 테스트 그룹만 테스트를 실행할 수 있는 기능입니다.
@Tag
테스트 메소드 위에 @Tag 애너테이션과 함께 이름을 추가해서 태그를 설정합니다. 하나의 테스트 메소드에 여러 태그를 사용할 수 있습니다.
예시로 태그가 없는 다음과 같은 코드가 있다고 가정합니다.
class StudyTest {
@Test
@DisplayName("스터디 만들기 fast")
void create_new_study() {
System.out.println("스터디 만들기 fast");
}
@Test
@DisplayName("스터디 만들기 slow")
void create_new_study_again() {
System.out.println("스터디 만들기 slow");
}
@BeforeAll
static void beforeAll(){
System.out.println("before all");
}
@AfterAll
static void afterAll(){
System.out.println("before all");
}
@BeforeEach
void beforEach(){
System.out.println("before each");
}
@AfterEach
void afterEach(){
System.out.println("after each");
}
}
위 코드의 실행 결과는 다음과 같습니다.
이번에는 원하는 테스트 메소드 위해 태그를 추가합니다.
class StudyTest {
@Test
@DisplayName("스터디 만들기 fast")
@Tag("fast")
void create_new_study() {
System.out.println("스터디 만들기 fast");
}
@Test
@DisplayName("스터디 만들기 slow")
@Tag("slow")
void create_new_study_again() {
System.out.println("스터디 만들기 slow");
}
@BeforeAll
static void beforeAll(){
System.out.println("before all");
}
@AfterAll
static void afterAll(){
System.out.println("before all");
}
@BeforeEach
void beforEach(){
System.out.println("before each");
}
@AfterEach
void afterEach(){
System.out.println("after each");
}
}
그리고 intellij 상단에 Edit Configurations를 클릭,
Run/Debug Configuration 화면이 켜지면 Test kind를 Tags로 변경합니다.
마지막으로 Tag expression에 실행을 원하는 Tag를 입력하고,
테스트를 실행하면 다음과 같이 원하는 테스트 메소드만 실행할 수 있습니다.
커스텀 태그
커스텀 태그는 직접 특정한 태그를 만들어 사용하는 방식입니다. 이렇게 미리 커스텀 태그를 만들고, 여러번 사용하면 코드의 중복과 태그의 오타가 발생할 확률을 줄일 수 있습니다.
커스텀 태그를 사용해서 위의 테스트 코드를 수정합니다.
1. 커스텀 태그를 만들기
@Retention(RetentionPolicy.RUNTIME) // 에너테이션을 사용한 코드가 해당 애너테이션의 정보를 런타임에도 유지해야한다.
@Target(ElementType.METHOD) //이 애너테이션은 메소드에 사용할 수 있다.
@Tag("fast")
@Test
public @interface FastTest {
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Tag("slow")
@Test
public @interface SlowTest {
}
2. 기존의 태그를 커스텀 태그로 변경하기
class StudyTest {
@FastTest
@DisplayName("스터디 만들기 fast")
void create_new_study() {
System.out.println("스터디 만들기 fast");
}
@SlowTest
@DisplayName("스터디 만들기 slow")
void create_new_study_again() {
System.out.println("스터디 만들기 slow");
}
@BeforeAll
static void beforeAll(){
System.out.println("before all");
}
@AfterAll
static void afterAll(){
System.out.println("before all");
}
@BeforeEach
void beforEach(){
System.out.println("before each");
}
@AfterEach
void afterEach(){
System.out.println("after each");
}
}
커스텀 태그를 사용할 일이 많아 질수록 코드가 깔끔해지겠죠?
Maven 사용하기
Edit Configurations과 똑같은 결과를 만들기 위해 pom.xml 파일을 수정해서 Mavn을 통해 원한는 태그를 실행할 수 있습니다.
먼저 프로젝트의 pom.xml에 다음과 같이 surefire plugin을 이용한 설정을 추가합니다.
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<groups>fast</groups>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
그리고 다시 ./mvnw test 를 intellij 터미널에 입력하여 테스트를 진행하면, 원하는 태그의 테스트 메소드만 실행되는 걸 확인할 수 있습니다.
'스프링 > JUnit' 카테고리의 다른 글
[Junit] MockMvc 객체란? (0) | 2021.04.29 |
---|---|
[JUnit] JUnit 5로 자바 단위 테스트 시작하기 (0) | 2021.04.27 |
[JUnit] JUnit5 테스트를 반복 실행하는 방법(@RepeaedTest, @ParameterizedTest) (0) | 2020.12.15 |
[JUnit] JUnit5 테스트 이름 표시하기 (0) | 2020.12.14 |
[JUnit] Assertion, JUnit 5의 단언문 (0) | 2020.12.02 |
댓글