tag를 사용하여 각 테스트를 구분하여 테스트를 진행할 수 있다.
public class TagTest {
@Test
@Tag(value = "test1")
void tag1(){
System.out.println("test1");
}
@Test
@Tag(value = "test2")
void tag2(){
System.out.println("test2");
}
}
intellij에서는 다음 코드를 테스트별로 실행하기 위해서 환경변수를 잡아주면 된다. 그런데 내 intellij 버전에서는 해당 부분을 못 찾겠다...
그래서 터미널에서 실행시키는 방법에 대해 알아보자. 어차피 실제 사용은 대부분 터미널로 설정하고 사용하는게 보편적이니까.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<groups>test1</groups>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>ci</id>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<groups>test1 | test2</groups>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
기존의 pom에 profiles 태그를 추가하여 다음과 같이 작성한다. 길지만 내용을 보면 default profile일 경우 test1의 태그를 실행시키고 ci profile을 선택할 경우 test1과 test2를 실행시킨다는 의미이다. 실제로 확인해보자.
mvnw test
로 실행했을 경우
test1 태그만 실행된것을 확인할 수 있고
mvnw test -P ci
입력했을 경우
test1 test2가 실행된 것을 확인할 수 있다.
테스트를 진행하면 로컬인지 테스트인지 실서버인지에 따라 테스트를 다르게 진행해야하는 경우나 실행하지 말아야하는 경우가 존재하는데 그럴때 @Tag를 통해 구분해서 사용하는 것은 좋은 방법이 될거 같다.