2016-05-27 2 views
0

У меня есть интеграционные тесты, и они выполнены отлично, но Jacoco рассматривает их как модульные тесты. Как сказать Jacoco увидеть их в качестве интеграционных тестов и отобразить их охват графика, а не в каталоге jacoco-ut, но это каталог jacoco-it?Имеют интеграционные тесты в каталоге jacoco-it

Здесь, в конфигурации 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> 

UPDATE: я отсутствовал этот бит в Maven-безотказное-плагин плагин:

<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> 

ответ

1

Вы поняли шаблон для включения тега Maven-безотказного-плагина. Шаблон используется для имени пакета классов в пределах пути тестового класса (см. Также https://maven.apache.org/surefire/maven-failsafe-plugin/examples/inclusion-exclusion.html).

Плагин build-helper-maven включает в себя все классы в src/it/java для тестового пути. Затем шаблон тега include в обоих тестовых плагинах (surefire, failafe) фильтрует классы внутри этого тестового пути. Эти отфильтрованные классы выполняются тестовыми плагинами.

Так рабочий процесс

  1. Строить-Helper-плагин расширяет набор тестовых классов, которые должны быть составлены и выполнены. Поэтому используется директива source. Местоположение пути, определенное в этой директиве источника, связано с проектом проекта Maven.
  2. Плагин компилятора компилирует классы java.
  3. Jacoco-Plugin должен измерять покрытие на производственных классах модульными испытаниями. Поэтому нормальный агент должен быть подготовлен до того, как будут выполнены тесты. Вы можете указать, какой производственный код должен быть включен или исключен в измерении охвата (включить/исключить директиву). Шаблон в этих директивах основан на пакетах (вместо использования точек используются трюки).
  4. Surefire-Plugin выполняет тесты, полное имя которых соответствует образцу директивы include. В шаблоне вместо точек используются косые черты.
  5. Теперь Jacoco-Plugin должен измерить покрытие в производственных классах интеграционными тестами. Поэтому агент интеграции должен быть подготовлен до того, как будут выполнены тесты. И снова вы можете указать, какой производственный код должен быть включен или исключен в измерении охвата (include/exclude директива). Шаблон в этих директивах основан на пакетах (вместо использования точек используются трюки).
  6. То же самое для Failsafe-Plugin. Он выполняет тесты, полное имя которых соответствует шаблону директивы include. В шаблоне вместо точек используются косые черты.
+0

Я понимаю, что должен использовать шаблон пути, а не шаблон упаковки. Это правильно ? Вы говорите, что все классы смешиваются в одном каталоге? Нет способа отличить их от имени подкаталога? Здесь может помочь только суффикс имени класса, например ИТ. – Stephane

+0

Нет, наоборот. Вы должны использовать шаблон пакета.После компиляции все скомпилированные классы из src/it/java и src/test/java относятся к целевым/тестовым классам (путь тестового класса). Затем плагин surefire/отказоустойчивый выполняет классы, описанные шаблоном в теге include. Поэтому ваш подход с использованием суффикса имени класса поможет. BTW проверяет суффикс по умолчанию отказоустойчивого плагина (http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#includes), чтобы уменьшить конфигурацию. –

+0

Я все еще смущен, так как в доке показан путь, такой как include. Косой чертой называется путь. Например, точка означает пакет. Я попробовал этот конфиг: <конфигурация> $ {project.build.directory} /coverage-reports/jacoco-it.exec <ИмениСвойство> failsafeArgLine * .it * . и */it/*, но эти две конфигурации не содержали ничего. У меня есть мои интеграционные тесты в папке it /. Вы знаете, как выразить это как включение? – Stephane