Maven2 Multiproject Cobertura Сообщение о проблемах во время mvn сайта - PullRequest
3 голосов
/ 18 сентября 2008

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

Мы используем mvn 2.0.8. Я попытался запустить mvn clean site, mvn clean site:stage и mvn clean package site. Я знаю, что тесты запущены, они отображаются в отчетах верности (как в 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

Ответы [ 4 ]

1 голос
/ 11 мая 2013

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

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

Тем не менее, в случае если у вас есть один отдельный проект, нет необходимости объединять. В тестовом проекте вы можете скопировать файл .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>
1 голос
/ 23 ноября 2009

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

Моя конфигурация похожа на вашу, но в дополнение к указанию чистой проверки в 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 находятся в глобальной организации, которую все проекты используют в качестве родителя.

Таким образом, проекты не указывают ничего связанного с Кобертурой в своих файлах pom.xml, но они по-прежнему генерируют отчеты о покрытии.

1 голос
/ 12 января 2010

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

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

1 голос
/ 19 сентября 2008

Мне не удалось заставить Кобертуру объединить репортажи из мульти-проектов. В целом это было проблемой с многопроектной отчетностью.

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

...