[maven] Maven에서 단위 테스트는 방지하지만 통합 테스트는 허용

SureFire 플러그인을 사용하여 일부 단위 테스트를 실행하고 FailSafe 플러그인을 사용하여 일부 통합 테스트를 실행하는 Maven 빌드가 있습니다. FailSafe 플러그인의 테스트를 실행하는 방법을 원합니다.

멀티 모듈 빌드이므로 모든 모듈의 pom을 편집하고 싶지 않기 때문에 pom에 다른 프로파일이나 다른 것을 추가하는 것은 좋은 해결책이 아닙니다.

있다 skip.testsmaven.test.skipskipTests중지하는 모든 테스트를하고,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

(이것이 도움이된다면 언급 된 의견을 공감하십시오)


답변

별도의 프로파일에서 통합 또는 단위 테스트를 실행하십시오. 그런 다음 프로필을 활성화 / 비활성화 할 수 있습니다.