2008-09-18 3 views
3

У нас есть мультипроект, который мы пытаемся запустить отчеты о покрытии проб Cobertura в рамках нашей сборки сайта mvn. Я могу заставить Cobertura работать над дочерними проектами, но он ошибочно сообщает о покрытии 0%, хотя в отчетах все еще выделяются строки кода, которые были затронуты модульными тестами.Maven2 Multiproject Проблемы с сообщением Cobertura Во время mvn-сайта Build

Мы используем mvn 2.0.8. Я пробовал работать mvn clean site, mvn clean site:stage и mvn clean package site. Я знаю, что тесты запущены, они отображаются в отчетах surefire (отчеты txt/xml и сайта). Я что-то упустил в конфигурации? Не работает ли Cobertura правильно с мультипроектами?

Это в родительском .pom:

<build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>cobertura-maven-plugin</artifactId> 
       <inherited>true</inherited> 
       <executions> 
        <execution> 
         <id>clean</id> 
         <goals> 
          <goal>clean</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 
<reporting> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>cobertura-maven-plugin</artifactId> 
      <inherited>true</inherited> 
     </plugin> 
    </plugins> 
</reporting> 

Я попытался запустить его и без следующих в дочерних .poms:

<reporting> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>cobertura-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</reporting> 

Я получаю это на выходе сборка:

... 
[INFO] [cobertura:instrument] 
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file 
Instrumenting 3 files to C:\workspaces\sandbox\CommonJsf\target\generated-classes\cobertura 
Cobertura: Saved information on 3 classes. 
Instrument time: 186ms 

[INFO] Instrumentation was successful. 
... 
[INFO] Generating "Cobertura Test Coverage" report. 
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file 
Cobertura: Loaded information on 3 classes. 
Report time: 481ms 

[INFO] Cobertura Report generation was successful. 

И отчет выглядит следующим образом: cobertura report http://trandem.com/images/cobertura.png

+4

Человек, вам нужен новый монитор! Я едва могу прочитать эти имена классов. – 2008-09-18 23:27:41

ответ

1

Я подозреваю, что вам не хватает выполнения плагина cobertura во время фазы компиляции, так что код запускается с помощью плагинов отчетности в жизненном цикле сайта после того, как тесты были запущены. Таким образом, тестовые прогоны не собираются, потому что они работают на неинструментальном коде. Анализируйте свои журналы сборки более тщательно - если я прав, вы заметите, что тесты верной проверки выполняются до cobertura: instrument.

Моя конфигурация похожа на вашу, но в дополнение к определению чистой exectution в pluginManagement (как вы), я указать Cobertura плагин явно в сборке плагинов разделе:

<build> 
    ... 
    <plugins> 
    ... 
     <plugin> 
     <inherited>true</inherited> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>cobertura-maven-plugin</artifactId> 
     <version>${cobertura.plugin.version}</version> 
     </plugin> 
    </plugins> 
    </build> 

Моя конфигурация Сорта работает, и все материалы Cobertura находятся в глобальном масштабе всей организации, который все проекты используют в качестве родителя.

В этом случае проекты не указывают ничего, что связано с Cobertura в их pom.xml, но они все равно генерируют отчеты о покрытии.

1

Я не добился успеха в получении Cobertura для объединения отчетов из нескольких проектов. В целом это была проблема с многопроектной отчетностью.

Мы оцениваем sonar как решение для отчетов по показателям. Кажется, он отлично справляется с предоставлением сводных показателей по проектам, в том числе с несколькими проектами.

1

Решение, реализованное мной, является несколько ручным, но работает. Он состоит из нескольких шагов одного из них - это шаг для объединения нескольких файлов .ser, которые генерируются Cobertura. Это можно сделать, используя инструмент командной строки cobertura-merge внутри задачи maven.

В соответствии с результатом, который вы показываете, файлы фактически не инструментальные, это говорит о том, что только 3 файла инструмента.

+0

Вы правы. Эта страница иллюстрирует эту настройку: http://thomassundberg.wordpress.com/2012/02/18/test-coverage-in-a-multi-module-maven-project/. Ant используется для вызова cobertura merge, так как нет цели maven для вызова слияния. – Snicolas 2013-05-11 05:57:03

1

@Marco прав, достичь этого обычно невозможно только через maven, так как плагин maven cobertura не имеет цели слияния.

Вы можете достичь этого путем сочетания мавена и муравьев целей: http://thomassundberg.wordpress.com/2012/02/18/test-coverage-in-a-multi-module-maven-project/

Тем не менее, в случае, у вас есть один единственный undertest проекта, нет необходимости сливать. Вы можете в тестовом проекте скопировать файл .ser и инструментальные классы из тестируемого проекта:

//in test project 
<plugin> 
<groupId>com.github.goldin</groupId> 
<artifactId>copy-maven-plugin</artifactId> 
<version>0.2.5</version> 
<executions> 
    <execution> 
    <id>copy-cobertura-data-from-project-under-test</id> 
    <phase>compile</phase> 
    <goals> 
     <goal>copy</goal> 
    </goals> 
    <configuration> 
    <resources> 
     <resource> 
         <directory>${project.basedir}/../<project-under-test>/target/cobertura</directory> 
          <targetPath>${project.basedir}/target/cobertura</targetPath> 
       <includes>     
           <include>*.ser</include> 
       </includes> 
      </resource> 
      <resource> 
        <directory>${project.basedir}/../<project-under-test>/target/generated-classes/cobertura/</directory> 
        <targetPath>${project.basedir}/target/generated-classes/cobertura</targetPath> 
        <preservePath>true</preservePath> 
      </resource> 
     </resources> 
      </configuration> 
     </execution> 
</executions> 
</plugin> 

//in parent project 
<build> 
<plugins> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>cobertura-maven-plugin</artifactId> 
    <configuration> 
     <format>xml</format> 
     <aggregate>true</aggregate> 
    </configuration> 
    <executions> 
     <execution> 
        <goals> 
       <goal>clean</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
    </plugins> 
</build> 
<reporting> 
<plugins> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>cobertura-maven-plugin</artifactId> 
    <version>${cobertura.version}</version> 
     </plugin> 
</plugins> 
</reporting> 
Смежные вопросы