2013-02-28 2 views
3

У меня есть проблема с получением отчетов о покрытии кода как для тестов интеграции, так и для модульных тестов в Sonar для проекта Maven Plugin (который использует плагин invoker для тестов интеграции).Запуск кода покрытия с Cobertura и Jacoco

Я не могу использовать инструмент покрытия Jacoco по умолчанию для модульных тестов, так как они используют Powermock, что приводит к покрытию 0% для классов, используя это. С другой стороны, я не могу найти надежный способ получить результаты для интеграционных тестов на основе Groovy без использования Jacoco.

Так что мне нужно, чтобы Cobertura подготовил отчет о единичном тестировании, Jacoco для подготовки отчета об интеграции, а для Sonar - возможность чтения партии.

Я попытался использовать здесь пример https://github.com/Godin/sonar-experiments/tree/master/jacoco-examples/maven-invoker-plugin-example, но устраняя выполнение, связанное с этапом тестирования, но затем получаю единичное тестовое покрытие «-» в Sonar. Я думаю, причина в том, что для того, чтобы этот метод работал, мне нужно рассказать о Jacoco в качестве основного инструмента покрытия для Sonar.

Любые идеи по пути вокруг этого? Мой pom.xml следующим образом:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.acme.myproj.plugins</groupId> 
    <artifactId>slice2java-maven-plugin</artifactId> 
    <version>0.1-SNAPSHOT</version> 
    <packaging>maven-plugin</packaging> 

    <name>Slice2Java Maven Plugin</name> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <sonar.exclusions>**/generated*/*.java</sonar.exclusions> 
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> 
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> 
    <sonar.jacoco.itReportPath>${project.basedir}/target/jacoco-it.exec</sonar.jacoco.itReportPath> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-plugin-api</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.maven.plugin-tools</groupId> 
     <artifactId>maven-plugin-annotations</artifactId> 
     <version>3.2</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.plexus</groupId> 
     <artifactId>plexus-utils</artifactId> 
     <version>3.0.8</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     <scope>test</scope> 
    </dependency> 
     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-all</artifactId> 
      <version>1.9.5</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-core</artifactId> 
      <version>1.5</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-module-junit4</artifactId> 
      <version>1.5</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-api-mockito</artifactId> 
      <version>1.5</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-plugin-plugin</artifactId> 
     <version>3.2</version> 
     <configuration> 
      <goalPrefix>slice2java</goalPrefix> 
      <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> 
     </configuration> 
     <executions> 
      <execution> 
      <id>mojo-descriptor</id> 
      <goals> 
       <goal>descriptor</goal> 
      </goals> 
      </execution> 
      <execution> 
      <id>help-goal</id> 
      <goals> 
       <goal>helpmojo</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <profiles> 
    <profile> 
     <id>run-its</id> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-invoker-plugin</artifactId> 
      <version>1.8</version> 
      <configuration> 
       <debug>true</debug> 
       <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo> 
       <pomIncludes> 
       <pomInclude>*/pom.xml</pomInclude> 
       </pomIncludes> 
       <postBuildHookScript>verify</postBuildHookScript> 
       <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath> 
       <settingsFile>src/it/settings.xml</settingsFile> 
       <goals> 
       <goal>clean</goal> 
       <goal>test-compile</goal> 
       </goals> 
      </configuration> 
      <executions> 
       <execution> 
       <id>integration-test</id> 
       <goals> 
        <goal>install</goal> 
        <goal>integration-test</goal> 
        <goal>verify</goal> 
       </goals> 
       </execution> 
      </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.jacoco</groupId> 
       <artifactId>jacoco-maven-plugin</artifactId> 
       <version>0.5.3.201107060350</version> 
       <configuration> 
        <includes>com.acme.*</includes> 
       </configuration> 
       <executions> 
        <execution> 
         <id>pre-integration-test</id> 
         <phase>pre-integration-test</phase> 
         <goals> 
          <goal>prepare-agent</goal> 
         </goals> 
         <configuration> 
          <destFile>${project.build.directory}/jacoco-it.exec</destFile> 
          <propertyName>invoker.mavenOpts</propertyName> 
         </configuration> 
        </execution> 
        <execution> 
         <id>post-integration-test</id> 
         <phase>post-integration-test</phase> 
         <goals> 
          <goal>report</goal> 
         </goals> 
         <configuration> 
          <dataFile>${project.build.directory}/jacoco-it.exec</dataFile> 
          <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    </profiles> 

</project> 
+0

У меня была такая же проблема с моим проектом. Я заметил, что единственные файлы, которые, похоже, имеют проблемы с охватом кода, - это те, которые используют аннотацию @PrepareForTest. – HardcoreBro

ответ

2

Так как вы настроить сонар как

<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> 
<sonar.jacoco.itReportPath> 
    ${project.basedir}/target/jacoco-t.exec 
</sonar.jacoco.itReportPath> 

Это означает, что вы говорите сонар для повторного использования существующий отчет sonar.jacoco. itReportPath. Если нет существующего отчета, никакого покрытия нет.

В мае случае, я использую Cobertura и повторно использовать отчет Maven генерации сайта. как следующие свойства конфигурации: -

<sonar.java.coveragePlugin>cobertura</sonar.java.coveragePlugin> 
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis> 
<sonar.surefire.reportsPath> 
    ${project.build.directory}/surefire-reports 
</sonar.surefire.reportsPath> 
<sonar.cobertura.reportPath> 
    ${project.build.directory}/site/cobertura/coverage.xml 
</sonar.cobertura.reportPath> 

я могу получить повторное использование с помощью следующей команды: -

mvn clean install site sonar:sonar 

я могу воспроизвести проблему с помощью следующей команды: -

mvn clean install sonar:sonar 

Покрытие составляет 0%. Поскольку на странице нет существующего отчета путь отчета.

Тогда, пожалуйста, убедитесь, что есть сообщение с именем «jacoco-t.exec», как указано перед выполнением гидролокатора.

Поскольку я не знаком с JaCoCo и не знаю, какая фаза maven производит файл отчета thae.Я хотел бы предложить, чтобы выполнить команду, как следующее: -

mvn clean test sonar:sonar 

или

mvn clean install sonar:sonar 

или же, как моя

mvn clean install site sonar:sonar 

Я надеюсь, что это может помочь.

С уважением,

Charlee Ch.

Смежные вопросы