4

テストをユニットフェーズと統合フェーズに分割したプロジェクトがあります。私はbuildbotを実行していますが、問題は、テストで失敗してもMavenのリターンコードが0であるため、buildbotのビルドが成功することです。

これは、mvn統合テストの結果です。

Results :

Tests in error: 
 Info about failed tests

Tests run: 5, Failures: 0, Errors: 5, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 19 seconds
[INFO] Finished at: Tue Feb 12 09:43:53 UTC 2013
[INFO] Final Memory: 36M/97M
[INFO] ------------------------------------------------------------------------

$ echo $?
0

mvn installの結果は、ビルドが成功した部分がなくても同じです。結果:

Tests in error: 
  Info about failed tests

Tests run: 5, Failures: 0, Errors: 5, Skipped: 0

$ echo $?
0

Surefireの構成は次のようになります。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.13</version>
  <configuration>
    <printSummary>true</printSummary>
    <excludedGroups>com.testlib.IntegrationTest</excludedGroups>
  </configuration>
  <executions>
    <execution>
    <id>unit-tests</id>
    <phase>test</phase>
    <goals>
      <goal>test</goal>
    </goals>
    <configuration>
          <excludedGroups>com.testlib.IntegrationTest</excludedGroups>
    </configuration>
    </execution>
    <execution>
    <id>integration-tests</id>
    <phase>integration-test</phase>
    <goals>
      <goal>test</goal>
    </goals>
    <configuration>
      <includes>
            <groups>com.testlib.IntegrationTest</groups>
      </includes>
        </configuration>
    </execution>
  </executions>
</plugin>

Mavenのリターンコードに関する他のスレッドを読んだことがありますが、理論的には、関連するバグは私のMavenバージョン(Apache Maven 2.2.1(rdebian-8))で修正する必要があります。

この動作を変更する方法はありますか?

更新: 提案されたように、私はsurefireで試しました:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.13</version>
    <dependencies>
        <dependency>
        <groupId>org.apache.maven.surefire</groupId>
        <artifactId>surefire-junit47</artifactId>
        <version>2.13</version>
        </dependency>
    </dependencies>
    <configuration>
        <groups>com.testlib.IntegrationTest</groups>
    </configuration>
    <executions>
        <execution>
            <goals>
            <goal>integration-test</goal>
            <goal>verify</goal>
            </goals>
            <configuration>
                <includes>
                  <include>**/*.class</include>
                </includes>
            </configuration>
        </execution>
    </executions>

初期化エラーを回避するためにsurefire-junitが必要です。

4

2 に答える 2

3

最初に、以下を構成する同じ親pomがあるかどうかを確認します。

<testFailureIgnore>true</testFailureIgnore>

どこかで...これは次の方法で確認できます:

mvn help:effective-pom

さらに、あなたはmaven-surefire-pluginとの統合テストを実行しようとしていますが、これは単に間違っています。統合テストには、maven-failsafe-pluginを使用します。もう1つは、統合テストにIT * .java、*IT.javaなどの正しい方法で名前を付けることです。

もう1つは、なぜこのような古いMavenバージョンチェックMaven3.0.4を使用しているのかということです。

すみません。あなたが統合テストについて話しているという見落とし。統合テストにmaven-failsafe-pluginを正しく使用している場合 、統合テストの結果を後でチェックすることを目的とした特定の目標検証が​​含まれています。ただし、実行ブロックと特定のライフサイクルフェーズへのバインドを介して個別に構成する必要があります。

于 2013-02-12T10:31:23.757 に答える
2

グループを使用する構成と、surefireを使用するフォルダーを使用する2つの異なる構成で動作させることができました。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.13</version>
    <configuration><excludedGroups>com.testlib.IntegrationTest</excludedGroups>
    </configuration>
    <executions>
        <execution>
            <id>integration-test</id>
            <phase>integration-test</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
              <skip>false</skip>
                      <excludedGroups>com.biicode.testlib.UnitTest</excludedGroups>
                      <groups>com.testlib.IntegrationTest</groups>
            </configuration>
        </execution>
    </executions>
 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>**/integration/*.java</exclude>
        </excludes>
    </configuration>
    <executions>
    <execution>
        <id>integration-test</id>
        <phase>integration-test</phase>
        <goals>
            <goal>test</goal>
        </goals>
        <configuration>
        <skip>false</skip>
        <excludes>
            <exclude>none</exclude>
        </excludes>
        <includes>
            <include>**/integration/*.java</include>
        </includes>
    </configuration>
  </execution>
  </executions>
</plugin>
于 2013-02-12T15:05:13.020 に答える