JUnit 카테고리와 Maven을 사용하여 매우 쉽게 분할 할 수 있습니다.
이것은 단위 및 통합 테스트를 분할하여 아래에 매우 간략하게 표시됩니다.
마커 인터페이스 정의
카테고리를 사용하여 테스트를 그룹화하는 첫 번째 단계는 마커 인터페이스를 만드는 것입니다.
이 인터페이스는 통합 테스트로 실행하려는 모든 테스트를 표시하는 데 사용됩니다.
public interface IntegrationTest {}
테스트 클래스를 표시하십시오
테스트 클래스 상단에 카테고리 주석을 추가하십시오. 새 인터페이스의 이름을 사용합니다.
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
메이븐 유닛 테스트 구성
이 솔루션의 장점은 사물의 단위 테스트 측면에서 실제로 변화가 없다는 것입니다.
우리는 통합 테스트를 무시하도록 구성을 maven surefire 플러그인에 추가하기 만하면됩니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>
</configuration>
</plugin>
mvn clean 테스트를 수행하면 표시되지 않은 단위 테스트 만 실행됩니다.
Maven 통합 테스트 구성
다시 이것에 대한 구성은 매우 간단합니다.
통합 테스트 만 실행하려면 다음을 사용하십시오.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<groups>com.test.annotation.type.IntegrationTest</groups>
</configuration>
</plugin>
id가있는 프로파일에서 이것을 랩핑하면을 IT
사용하여 빠른 테스트 만 실행할 수 있습니다 mvn clean install
. 통합 / 느린 테스트 만 실행하려면을 사용하십시오 mvn clean install -P IT
.
그러나 대부분의 경우 기본적으로 빠른 테스트를 실행하고을 사용하여 모든 테스트 를 수행하려고합니다 -P IT
. 이 경우 트릭을 사용해야합니다.
<profiles>
<profile>
<id>IT</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>java.io.Serializable</excludedGroups> <!-- An empty element doesn't overwrite, so I'm using an interface here which no one will ever use -->
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
보시다시피, 주석이 달린 테스트는 제외합니다 java.io.Serializable
. 프로파일이 확실한 플러그인의 기본 설정을 상속하기 때문에 당신이 말하는 그래서 경우에도 필요 <excludedGroups/>
하거나 <excludedGroups></excludedGroups>
, 값이 com.test.annotation.type.IntegrationTest
사용됩니다.
none
클래스 패스의 인터페이스이므로 사용할 수 없습니다 (Maven이 이것을 확인합니다).
노트:
surefire-junit47
Maven이 JUnit 4 러너로 자동 전환되지 않는 경우에만 종속성 이 필요합니다. groups
또는 excludedGroups
요소를 사용하면 스위치가 트리거되어야합니다. 여기를 참조하십시오 .
- 위의 코드 대부분은 Maven Failsafe 플러그인 설명서에서 가져 왔습니다. 이 페이지의 "JUnit 카테고리 사용"섹션을 참조 하십시오 .
- 테스트하는 동안
@RunWith()
주석이나 스위트 를 사용 하여 스프링 기반 테스트를 실행할 때도 작동한다는 것을 알았습니다 .