1

私はCargoをセットアップして、Mavenプロファイルの統合前テストフェーズ中にGlassfishのインスタンスを開始しました。その後、私のテストは統合テストフェーズで実行され、最後に、貨物は統合テスト後のフェーズでTomcatインスタンスをシャットダウンします。

これはすべてのテストに合格するとうまく機能しますが、いずれかのテストが失敗すると、Mavenビルドが失敗し、統合テスト後のフェーズに到達しないため、Glassfishインスタンスが実行されたままになります(そして、私はそれを停止せずに停止することはできません処理する)。

私は何か間違ったことをしていますか?統合テストフェーズが失敗した場合でも、貨物が私のGlassfishインスタンスをシャットダウンすることを確認する方法はありますか?

私のMavenプロファイル:

<profile>
    <!-- run integration tests against the app deployed to a container -->
    <id>integration</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <!-- override the exclusion and include integration tests -->
                            <excludes>
                                <exclude>none</exclude>
                            </excludes>
                            <includes>
                                <include>***IntegrationTest.java</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>${cargo.plugin.version}</version>
                <executions>
                    <execution>
                        <id>start-server</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>start</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>stop-server</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <container>
                        <containerId>glassfish3x</containerId>
                        <artifactInstaller>
                            <groupId>org.glassfish.main.distributions</groupId>
                            <artifactId>glassfish</artifactId>
                            <version>${glassfish.version}</version>
                        </artifactInstaller>
                    </container>
                    <configuration>
                        <properties>
                            <cargo.datasource.datasource.mysql>
                                cargo.datasource.jndi=jdbc/TrackerPool|
                                cargo.datasource.driver=com.mysql.jdbc.Driver|
                                cargo.datasource.url=jdbc:mysql://localhost/[database]|
                                cargo.datasource.transactionsupport=LOCAL_TRANSACTION|
                                cargo.datasource.username=[username]|
                                cargo.datasource.password=[password]
                            </cargo.datasource.datasource.mysql>
                        </properties>
                    </configuration>
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>
4

1 に答える 1

2

この問題は、統合テストではなく、単体テストに関連して使用することを目的としたmaven-surefire-pluginの誤った使用法に基づいています。そのような目的のために、問題を解決するmaven-failsave-pluginが存在します。

maven-failsave-pluginを使用すると、統合テストのインクルードルールの定義が解放されます。統合テストのMavenでの通常の命名規則は、次のとおりです。

 IT*.java
 *IT.java
 *ITCase.java

したがって、統合テストにそれに応じた名前を付けることをお勧めします。そうすれば、maven-surefire-plugin(単体テスト)にもmaven-failsafe-plugin(統合テスト)にも、いかなる種類のexlude/includeルールも必要ありません。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.13</version>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

検証の目標は、統合テストに失敗した場合にビルドを失敗させたい場合にのみ必要です。次のようにMavenを呼び出す必要があります。

mvn -Pprofile clean verify 
于 2013-01-12T17:59:47.630 に答える