maven-surefire-plugin, jacoco-maven-plugin не показывают покрытие

Я использую плагин maven-surefire-plugin версии 2.17 с maven.

Я использую jacoco-maven-plugin для анализа моих тестов junit:

Мой плагин jacoco, настроенный в моем pom.xml, выглядит так:

    <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.6.201602180812</version>
            <executions>
                <execution>
                    <id>agent-for-ut</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                    <configuration>
                        <destFile>${sonar.jacoco.reportPath}</destFile>
                        <append>true</append>
                    </configuration>
                </execution>
                <execution>
                    <id>post-unit-test</id>
                    <goals>
                        <goal>report</goal>
                    </goals>
                    <configuration>
                        <dataFile>${sonar.jacoco.reportPath}</dataFile>
                        <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

У меня есть класс в src/main/java/something/excel, который выглядит так:

package something.excel;

public class VDHTCStyle
{
    public int doSomething() {
        int i=0;
        return i+7;
    }
}

Мой тестовый класс в src/test/java/something/excel выглядит так:

package something.excel;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class VDHTCStyleStyleTest
{
    private VDHTCStyleStyle vDHTCStyleStyle;

    @Before
    public void setUp()
    {
        vDHTCStyleStyle = new VDHTCStyleStyle();
    }

    @Test
    public void shouldDoSomething() {
        int something = vDHTCStyleStyle.doSomething();
        assertEquals(something, 7);
    }

}

Когда я запускаю это с

mvn clean install

Я вижу это в журналах:

[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ xxxxx ---
[INFO] Surefire report directory: /var/lib/jenkins/workspace/xxxx/modules/xx/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running something.excel.VDHTCStyleTest
|classnames | 2.2.3 | A simple utility for conditionally joining classNames together|
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.062 sec - in something.excel.VDHTCStyleTest 

Теперь, если я посмотрю на сгенерированный файл отчета jacoco-ut, я увижу что-то вроде этого:

GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED
Module: xxx,something.excel,VDHTCStyleStyle,9,0,0,0,3,0,2,0,2,0

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

Почему? Помощь :)


person Somaiah Kumbera    schedule 02.06.2016    source источник


Ответы (1)


Похоже, проблема в том, что maven-surefire-plugin ведет себя непредсказуемо, когда указан дважды в многомодульном проекте.

У моего родительского модуля он был в разделе сборки, а у дочернего модуля pom также был в разделе сборки. Из-за этого казалось, что тесты выполняются, но покрытие всегда было 0 в дочернем модуле.

Исправление заключалось в том, чтобы удалить maven-surefire-plugin из pom дочернего модуля и оставить его только в разделе сборки родительского pom.

Проблема решена.

person Somaiah Kumbera    schedule 06.06.2016
comment
это было для конкретной версии surefire? об этом сообщалось как об ошибке? - person spy; 26.03.2018
comment
Нет, я не сообщил об этом как об ошибке, так как я чувствовал, что это была плохая конфигурация с моей стороны (я включил ее дважды) - person Somaiah Kumbera; 27.03.2018