2014-11-13 1 views
2

У меня есть проект с несколькими модулями maven.Проект модуля Maven с отдельным модулем тестирования - Покрытие кода?

root: 
    moduleA/ # no unit tests 
    moduleB/ # no unit tests 
    moduleC/ # no unit tests 
    tests/  # All unit tests, since depends on modules A, B and C 

Все тесты в одном модуле называются тестами /, а весь код - в отдельных модулях.

Есть ли способ получить покрытие кода?

+0

Испытания модуля по определению являются локальными для соответствующего модуля и не извлекаются в модуль separte. Таким образом, ваша установка для отдельного модуля модулей тестирования не имеет смысла. Намерение в Maven имеет производственный код плюс соответствующие модульные тесты в одном модуле. Поскольку в структуре папок отображается производственный код src/main/java. 'src/test/java' единичный тестовый код. – khmarbaise

+0

Я думаю, что это правильная установка, если вы рассматриваете модуль тестирования как место для тестов интеграции. На данный момент кажется, что jacoco не поддерживает это, вы можете попробовать Sonar, если у вас настроение действительно это сделать. В противном случае дождитесь следующей версии Jacoco, она может фактически ее поддерживать: D (https://github.com/jacoco/jacoco/pull/97) – AMilassin

+0

Если мы говорим об интеграционных тестах да, но это не написано в вопрос. – khmarbaise

ответ

0

Я не думаю, что любой из jacoco или cobertura способен сообщать покрытие кода по всем модулям. Возможно, вы захотите попробовать скомпилировать классы до, выполнив отчет по охвату тестирования, вместо того, чтобы полагаться на приборы «на лету».

См. Это jacoco maven goal для выполнения автономной аппаратуры.

+0

В jacoco вам не нужна аппаратура, потому что у нее есть агент, который можно настроить соответствующим образом. – khmarbaise

2

Существует способ сделать это. Магия - создать объединенный файл jacoco.exec и сделать это в два этапа. Мой ПОМ:

<properties> 
    ... 
    <jacoco.overall.exec>${maven.multiModuleProjectDirectory}/target/jacoco_analysis/jacoco.exec</jacoco.overall.exec> 
</properties> 

<build> 
    <pluginManagement> 
     <plugins> 

      ... 

      <plugin> 
       <groupId>org.jacoco</groupId> 
       <artifactId>jacoco-maven-plugin</artifactId> 
       <version>0.7.8</version> 
       <configuration> 
        <destFile>${jacoco.overall.exec}</destFile> 
        <dataFile>${jacoco.overall.exec}</dataFile> 
       </configuration> 
      </plugin> 

      ... 

     </plugins> 
    </pluginManagement> 
</build> 

<profiles> 
    <profile> 
     <id>runTestWithJacoco</id> 
     <activation> 
      <property> 
       <name>runTestWithJacoco</name> 
       <value>true</value> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.jacoco</groupId> 
        <artifactId>jacoco-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>default-prepare-agent</id> 
          <goals> 
           <goal>prepare-agent</goal> 
          </goals> 
          <configuration> 
           <append>true</append> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
    <profile> 
     <id>createJacocoReport</id> 
     <activation> 
      <property> 
       <name>createJacocoReport</name> 
       <value>true</value> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.jacoco</groupId> 
        <artifactId>jacoco-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>default-report</id> 
          <phase>validate</phase> 
          <goals> 
           <goal>report</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Добавьте это в родительском ПОМ и выполнить mvn clean install -DrunTestWithJacoco и чем mvn validate -DcreateJacocoReport. Теперь у вас есть полный охват класса, и не имеет значения, какой тест покрыл его. Магия заключается в использовании maven.multiModuleProjectDirectory для создания комбинированного файла jacoco.exec. Это свойство доступно с maven 3.3.1 и указывает на папку, в которой вы начали сборку maven.