0

統合テストがあり、それらは正常に実行されますが、Jacoco はそれらを単体テストと見なします。それらを統合テストとして表示し、jacoco-ut ディレクトリではなく jacoco-it ディレクトリにグラフ カバレッジを表示するように Jacoco に指示するにはどうすればよいですか?

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

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
      <argLine>${surefireArgLine}</argLine>
      <excludes>
        <exclude>**/it/java/*.java</exclude>
      </excludes>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.10</version>
    <executions>
      <execution>
        <id>add-test-source</id>
        <phase>process-test-sources</phase>
        <goals>
          <goal>add-test-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>src/it/java</source>
          </sources>
        </configuration>
      </execution>
      <execution>
        <id>add-test-resource</id>
        <phase>generate-test-resources</phase>
        <goals>
          <goal>add-test-resource</goal>
        </goals>
        <configuration>
          <resources>
            <resource>
              <directory>src/it/resources</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
      <execution>
        <id>add-it-resources</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${project.build.directory}/it-classes</outputDirectory>
          <resources>
            <resource>
              <directory>src/it/resources</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
      <argLine>${failsafeArgLine}</argLine>
      <testSourceDirectory>src/it/java</testSourceDirectory>
      <testClassesDirectory>${project.build.directory}/it-classes</testClassesDirectory>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.6.201602180812</version>
    <configuration>
      <skip>${maven.test.skip}</skip>
      <output>file</output>
      <append>true</append>
      <excludes>
        <exclude>**/config/*</exclude>
        <exclude>**/dialect/*</exclude>
      </excludes>
    </configuration>        
    <executions>
      <execution>
        <id>pre-unit-test</id>
        <phase>process-test-classes</phase>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
        <configuration>
          <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
          <propertyName>surefireArgLine</propertyName>
          <includes><include>**/ut/*</include></includes>
        </configuration>
      </execution>
      <execution>
        <id>post-unit-test</id>
        <phase>test</phase>
        <goals>
          <goal>report</goal>
        </goals>
        <configuration>
          <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
          <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
        </configuration>
      </execution>
      <execution>
        <id>pre-integration-test</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>prepare-agent-integration</goal>
        </goals>
        <configuration>
          <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
          <propertyName>failsafeArgLine</propertyName>
          <includes><include>**/it/*</include></includes>
        </configuration>
      </execution>
      <execution>
        <id>post-integration-test</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>report-integration</goal>
        </goals>
        <configuration>
          <dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>
          <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>

更新: maven-failsafe-plugin プラグインにこのビットがありませんでした:

<executions>
  <execution>       
    <goals>                       
      <goal>integration-test</goal>               
    </goals>                                                  
  </execution>                                                          
</executions> 

次のように追加した後:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
      <argLine>${failsafeArgLine}</argLine>
      <includes>
        <include>**/it/**</include>
      </includes>
    </configuration>
    <executions>
      <execution>       
        <goals>                       
          <goal>integration-test</goal>               
        </goals>                                                  
      </execution>                                                          
    </executions>                                                                   
  </plugin>

統合テスト レポートには、統合テストが表示されます。

最終的な完全な構成は次のとおりです。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
      <argLine>${surefireArgLine}</argLine>
      <includes>
        <include>**/ut/**</include>
      </includes>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.10</version>
    <executions>
      <execution>
        <id>add-test-source</id>
        <phase>process-test-sources</phase>
        <goals>
          <goal>add-test-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>src/it/java</source>
          </sources>
        </configuration>
      </execution>
      <execution>
        <id>add-test-resource</id>
        <phase>generate-test-resources</phase>
        <goals>
          <goal>add-test-resource</goal>
        </goals>
        <configuration>
          <resources>
            <resource>
              <directory>src/it/resources</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
      <argLine>${failsafeArgLine}</argLine>
      <includes>
        <include>**/it/**</include>
      </includes>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>integration-test</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.6.201602180812</version>
    <configuration>
      <skip>${maven.test.skip}</skip>
      <output>file</output>
      <append>true</append>
      <excludes>
        <exclude>**/config/*</exclude>
        <exclude>**/dialect/*</exclude>
      </excludes>
    </configuration>        
    <executions>
      <execution>
        <id>pre-unit-test</id>
        <phase>process-test-classes</phase>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
        <configuration>
          <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
          <propertyName>surefireArgLine</propertyName>
        </configuration>
      </execution>
      <execution>
        <id>post-unit-test</id>
        <phase>test</phase>
        <goals>
          <goal>report</goal>
        </goals>
        <configuration>
          <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
          <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
        </configuration>
      </execution>
      <execution>
        <id>pre-integration-test</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>prepare-agent-integration</goal>
        </goals>
        <configuration>
          <destFile>${project.build.directory}/coverage-reports/jacoco-it.exec</destFile>
          <propertyName>failsafeArgLine</propertyName>
        </configuration>
      </execution>
      <execution>
        <id>post-integration-test</id>
        <phase>post-integration-test</phase>
        <goals>
          <goal>report-integration</goal>
        </goals>
        <configuration>
          <dataFile>${project.build.directory}/coverage-reports/jacoco-it.exec</dataFile>
          <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>
4

1 に答える 1

1

maven-failsafe-plugin の include タグのパターンを誤解しています。このパターンは、テスト クラスパス内のクラスのパッケージ名に使用されます ( https://maven.apache.org/surefire/maven-failsafe-plugin/examples/inclusion-exclusion.htmlも参照してください)。

build-helper-maven-plugin には、すべてのクラスがsrc/it/javaテスト クラスパスに含まれています。次に、両方のテスト プラグイン (surefire、failsafe) のインクルード タグのパターンによって、このテスト クラスパス内のクラスがフィルター処理されます。これらのフィルタリングされたクラスは、テスト プラグインによって実行されます。

というわけでワークフローは

  1. Build-Helper-Plugin は、コンパイルして実行する必要がある一連のテスト クラスを拡張します。したがって、source ディレクティブが使用されます。このソース ディレクティブで定義されているパスの場所は、Maven プロジェクト パスに関連しています。
  2. Compiler Plugin は Java クラスをコンパイルします。
  3. Jacoco-Plugin は、単体テストを使用して本番クラスのカバレッジを測定する必要があります。したがって、テストを実行する前に通常のエージェントを準備する必要があります。どの製品コードをカバレッジ測定に含めるか除外するかを指定できます (include/exclude ディレクティブ)。これらのディレクティブのパターンはパッケージ ベースです (ドットの代わりにスラッシュが使用されます)。
  4. Surefire-Plugin は、完全修飾クラス名が include ディレクティブのパターンと一致するテストを実行します。このパターンでは、ドットの代わりにスラッシュを使用しています。
  5. これで、Jacoco-Plugin は、統合テストを使用して本番クラスのカバレッジを測定する必要があります。したがって、テストを実行する前に統合エージェントを準備する必要があります。また、カバレッジの測定に含めたり除外したりする製品コードを指定できます (include/exclude ディレクティブ)。これらのディレクティブのパターンはパッケージ ベースです (ドットの代わりにスラッシュが使用されます)。
  6. Failsafe-Plugin についても同様です。完全修飾クラス名が include ディレクティブのパターンと一致するテストを実行します。このパターンでは、ドットの代わりにスラッシュを使用しています。
于 2016-05-28T19:48:33.440 に答える