SureFire 플러그인을 사용하여 일부 단위 테스트를 실행하고 FailSafe 플러그인을 사용하여 일부 통합 테스트를 실행하는 Maven 빌드가 있습니다. FailSafe 플러그인의 테스트를 실행하는 방법을 원합니다.
멀티 모듈 빌드이므로 모든 모듈의 pom을 편집하고 싶지 않기 때문에 pom에 다른 프로파일이나 다른 것을 추가하는 것은 좋은 해결책이 아닙니다.
있다 skip.tests
및 maven.test.skip
및 skipTests
중지하는 모든 테스트를하고,skipITs
단지 안전 장치 플러그인 멈추는.
Maven과 같은 명령 줄 플래그가 skipITs
있지만 대신 “onlyITs”의 기능이 있습니까?
답변
확실한 테스트 만 건너 뛰는 가장 간단한 방법 은 다음과 같이 surefire를 구성하는 것입니다 ( 그러나 failsafe는 아님).
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14</version>
<configuration>
<!-- skips surefire tests without skipping failsafe tests.
Property value seems to magically default to false -->
<skipTests>${skip.surefire.tests}</skipTests>
</configuration>
</plugin>
이것은 당신이 실행할 수있게 mvn verify -Dskip.surefire.tests
하며, 안전 장치가 아닌 확실한 테스트 만 생략합니다; 또한 사전 통합 및 사후 통합을 포함한 다른 모든 필요한 단계를 실행하고 통합 테스트가 실패하면 verify
실제로 maven 빌드를 실패 하는 데 필요한 목표를 실행합니다 .
이것은 테스트를 건너 뛰도록 지정하는 데 사용되는 속성을 재정의하므로, 표준을 제공하면 -DskipTests=true
확실한 것은 무시하지만 비상 안전은 그것을 무시합니다. 특히 플래그를 이미 지정하는 기존 빌드 / 사용자가있는 경우 예기치 않은 결과가 발생할 수 있습니다. 간단한 해결 방법은 기본값 것 같다 skip.surefire.tests
의 값으로 skipTests
당신의 <properties>
POM을 섹션 :
<properties>
<skip.surefire.tests>${skipTests}</skip.surefire.tests>
</properties>
필요한 경우, skip.failsafe.tests
안전 장치 (failsafe) 라고하는 analagous 매개 변수를 제공 할 수는 있지만, 필요하지 않습니다. 단위 테스트는 일반적으로 초기 단계에서 실행되기 때문에 단위 테스트는 실행하지만 통합 테스트는 실행하지 않으려면 실행합니다. test
대신의 단계 verify
단계입니다. 당신의 경험은 다를 수 있습니다!
이러한 skip.(surefire|failsafe).tests
속성은 아마도 firefire / failsafe 코드 자체에 통합되어야하지만 “1 개의 작은 차이를 제외하고는 정확히 동일한 플러그인”정신을 위반하는 것이 확실하지 않습니다.
답변
해결 방법은 다음과 같습니다.
mvn clean test-compile failsafe:integration-test
틀림없이 이것은 추악하지만 문제를 해결할 수 있습니다.
또는 (또 다른 핵) :
mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false
참고:
답변
Antonio Goncalves Blog 의 코드를 사용하고 있으며 완벽하게 작동합니다.
다음과 같은 속성을 사용할 수 있습니다.
-DskipUTs=true
확실한 테스트를 건너 뛰기 위해.
-DskipITs=true
안전 장치 테스트 건너 뛰기
-DskipTests=true
모든 테스트를 건너 뜁니다.
는 pom.xml
다음과 같습니다 :
<properties>
<skipTests>false</skipTests>
<skipITs>${skipTests}</skipITs>
<skipUTs>${skipTests}</skipUTs>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<skipTests>${skipUTs}</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<id>run-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<skipTests>${skipTests}</skipTests>
<skipITs>${skipITs}</skipITs>
</configuration>
</plugin>
</plugins>
</build>
답변
도움이 되었기를 바랍니다!
FailSafe (통합 테스트 용 플러그인)로만 테스트를 실행하십시오. 기본적으로 다음과 같은 이름 지정으로 통합 테스트를 실행할 수 있습니다. * / IT .java, ** / IT.java, * /*ITCase.java ;,하지만 pom 파일에서 쉽게 변경할 수 있습니다)
mvn failsafe:integration-test
SureFire (단위 테스트 용 플러그인) 만 사용하려는 경우
mvn surefire:test
또는 한 번에 하나씩 테스트 :
mvn -Dtest=MyUnitlTest
답변
나는 이것을 좋아하므로 모든 단계가 정상적으로 실행됩니다.
mvn -Dtest=foo -DfailIfNoTests=false verify
답변
@danidemi 및 @GuillaumeHusta의 의견을 확장하려면 :
참고 : skipTests는 Failsafe Plugin 3.0.0-M3에서 더 이상 사용되지 않습니다 ( SUREFIRE-1611 ).
따라서 통합 테스트가 아닌 단위 테스트를 건너 뛰려면 최신 버전의 Failsafe 플러그인을 사용하는 경우이 작업을 수행 할 수 있습니다.
mvn verify -DskipTests
(이것이 도움이된다면 언급 된 의견을 공감하십시오)
답변
별도의 프로파일에서 통합 또는 단위 테스트를 실행하십시오. 그런 다음 프로필을 활성화 / 비활성화 할 수 있습니다.