4

Javaテストを実行するためにmaven-surefire-pluginを使用しています。テストは2つのカテゴリに分類されます。

  • 高速テスト
  • 遅いテスト

「高速」スイート全体は数秒で実行されますが、低速テストには30分かかります。

開発中は、高速テストのみを実行したいと思います。コミットするときは、低速テストも実行できるようにしたいので、低速テストを実行することはオプションであり、高速テストをデフォルトにする必要があります。

CIサーバーで、両方を実行したいと思います。

遅いテストに速いテストが含まれている場合は問題ありません(さらには推奨されます)。

このシナリオでは、Maven、JUnit、およびSurefireをどのように設定する必要がありますか?

4

2 に答える 2

3

junitのCategoryを使用する必要があります:Junitカテゴリ

最初の解決策

maven-surefire-pluginバージョン2.11以上を構成する

     <profile>
                    <id>normal</id>
                    <activation>
                            <activeByDefault>true</activeByDefault>
                    </activation>
                    <build>
                            <plugins>
                                    <plugin>
                                            <groupId>org.apache.maven.plugins</groupId>
                                            <artifactId>maven-surefire-plugin</artifactId>
                                            <configuration>
                                                    <excludedGroups>com.test.SlowTests</excludedGroups>
                                            </configuration>
                                    </plugin>
                            </plugins>
                    </build>
            </profile>

2番目の解決策

構成セクションでは、クラスのみをサポートするファイルを使用して正規表現を追加できます(デフォルト構成)。

           <configuration>
                <includes>
                    <include>**/*Test*.java</include>
                    <include>**/*Test.java</include>
                    <include>**/*TestCase.java</include>
                </includes>
            </configuration>
于 2012-03-02T12:46:22.600 に答える
1

自分でゼロから作成した商用プロジェクトでは、テストの実行に使用したSurefireプラグインポリシーとFailsafeプラグインポリシーに応じて、テストをユニット(名前を付けた*Test.java)と統合( )にそれぞれ分割しました。*IT.javaもちろん、ITの実行はUTよりもはるかに遅くなります。

mvn testこれにより、UTおよびUTとITの両方に対して、簡単なコマンドでテストのグループを実行できるようになります。また、。mvn integration-testを使用してITのみをスキップすることもできmvn install -DskipITsます。

もう1つの良い点は、環境の問題(つまり、データベースの起動に時間がかかりすぎる、メッセージブローカーのシャットダウンが早すぎるなど)が原因で、単体テストよりも失敗することが多いため、統合テストの結果が緩くなる可能性があることです。 。デフォルトでは、「検証」目標を明示的に含めない限り、フェイルセーフテストに失敗してもビルドは強制終了されません。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>integration-test</id>
            <goals>
                <goal>integration-test</goal>
            </goals>
        </execution>
        <!-- Uncomment this in order to fail the build if any integration test fail -->
        <!-- execution> <id>verify</id> <goals><goal>verify</goal></goals> </execution -->
    </executions>
</plugin>
于 2012-03-02T14:25:20.287 に答える