15

TestNgで確実に実行できるように、pomで次の構成を定義しました。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <skipTests>${skip-all-tests}</skipTests>
            </configuration>
            <executions>
                <execution>
                    <id>unit-tests</id>
                    <phase>test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>${skip-unit-tests}</skip>
                        <groups>unit</groups>

                        <excludedGroups>integration</excludedGroups>
                    </configuration>
                </execution>
                <execution>
                    <id>integration-tests</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <configuration>
                        <skip>${skip-integration-tests}</skip>
                        <groups>integration</groups>
                        <excludedGroups>unit</excludedGroups>
                    </configuration>
                </execution>
            </executions>
        </plugin>

しかし、2 つの実行の前に常に「default-test」実行が行われ、@test アノテーションが付けられたすべてのメソッドが実行されるようです (少なくとも私はそう思います)。

--- maven-surefire-plugin:2.12:test (default-test) @ my-project

たとえば、プロジェクトで「mvn test」を実行すると、2 つのテストが実行されます。「デフォルトテスト」と「単体テスト」。

誰かが私にこれをもう少し説明してもらえますか? これを無効にしたり、制御したりできますか (何をテストし、何をテストしないかを構成します)?

4

2 に答える 2

23

人々は、Maven 内のプラグインのデフォルトの組み込み実行をオーバーライドする方法が必要でした。

Maven 3 (または 2.1.0 または 2.2.0 として導入された可能性があります) は、パッケージのライフサイクルによって有効な pom に追加された各プラグイン実行のデフォルト実行 ID を定義することで、これを解決しました。

この暗黙的な ID の名前は常にdefault-_____、生成された正確なルールを思い出すことができません。

したがって、一致する実行を定義することで、パッケージの挿入された実行をオーバーライドできます。

あなたのケースを解決するには、変更<id>unit-tests</id>する<id>default-test</id>か追加します

            <execution>
                <id>default-test</id>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </execution>

どちらでも同じ効果がありますが 、surefire を 2 回実行するだけでよいため、 <id>unit-tests</id>toソリューションの方がパフォーマンスがわずかに高くなります。<id>default-test</id>

私が指摘するもう1つのことは、統合テストの前後にいくつかのことを実行したい場合があるため、おそらくmaven-failsafe-pluginを使用して統合テストを実行する方がよいということです.failsafeはそのために設計されていますユースケース(ただし、さらに下に切り替えるのは簡単なはずです)

于 2012-08-14T08:27:13.623 に答える