Почему я получаю 0% покрытия кода в отчете тестов Jacoco?

Вопрос или проблема

У меня 0% покрытия кода, как показано на изображении, хотя тесты были успешно сгенерированы, но мне также нужен отчет.

Примечание: Я использую фреймворк OSGI и Java 11

скриншот

Ниже приведена моя конфигурация pom.xml

<dependency>
        <groupId>org.evosuite</groupId>
        <artifactId>evosuite-standalone-runtime</artifactId>
        <version>1.1.0</version>  <!-- Здесь можно использовать любое имя версии -->
        <scope>system</scope>  <!-- Это говорит Maven использовать JAR из файловой системы -->
        <systemPath>
            C:\project-folder\evosuite-1.1.0.jar</systemPath> <!--
        Зашитый путь -->
    </dependency>

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.2.0</version>
        </plugin>
        <plugin>
            <artifactId>maven-clean-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <filesets>
                    <fileset>
                        <directory>node</directory>
                        <followSymlinks>false</followSymlinks>
                    </fileset>
                    <fileset>
                        <directory>node_modules</directory>
                        <followSymlinks>false</followSymlinks>
                    </fileset>
                </filesets>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>${maven-bundle-plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>
                    <Bundle-Activator>com.package.Activator</Bundle-Activator>
                    <Export-Package>
                        com.package;version=${project.version},com.package.exception*;version=${project.version},com.package.data*;version=${project.version},com.package*;version=${project.version}</Export-Package>
                    <Import-Package>*</Import-Package>
                </instructions>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>run-evosuite</id>
                    <phase>generate-test-sources</phase> <!-- Правильная фаза Maven для генерации тестов -->
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>java</executable>
                        <arguments>
                            <argument>-jar</argument>
                            <argument>
                                C:\project-folder\evosuite-1.1.0.jar</argument>
                            <argument>-class</argument>
                            <argument>
                                com.package.Java</argument>
                            <argument>-projectCP</argument>
                            <argument>${project.build.outputDirectory}</argument>
                            <argument>-Dtest_dir=src/test/java</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.12</version> <!-- Вы можете обновить это до последней версии, если нужно -->
            <executions>
                <!-- Это подготавливает агент JaCoCo -->
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <!-- Это генерирует отчет о покрытии -->
                <execution>
                    <id>report</id>
                    <phase>verify</phase>  <!-- Это выполняется после выполнения тестов -->
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

В настоящее время я сталкиваюсь с проблемой, когда покрытие кода показывает 0%, несмотря на то, что все тесты были сгенерированы и успешно выполнены. Я работаю в рамках фреймворка OSGI и использую Java 11 для разработки. Хотя тесты, похоже, выполняются без проблем, отчет о покрытии не отражает фактического выполнения тестов и не показывает покрытия. Я ожидаю получить корректный отчет о покрытии кода, который точно отражает испытуемые строки кода, включая такие детали, как покрытие ветвлений и методов. Кроме того, я хотел бы понять, почему отчет не генерируется или не показывает ни какого покрытия, несмотря на то, что тесты явно были выполнены. Для меня важно, чтобы инструмент покрытия интегрировался без проблем с моей текущей настройкой, так как мне нужно убедиться, что каждая часть приложения хорошо протестирована. В данный момент я не ищу решение, просто пытаюсь лучше понять потенциальные причины, по которым это может происходить.

Команды, которые я запускаю

  1. mvn clean install
  2. mvn dependency:build-classpath “-DincludeScope=runtime” “-Dmdep.outputFile=classpath.txt”
  3. java -jar C:\project-folder\evosuite-1.1.0.jar -projectCP “$(type classpath.txt)” -target C:\project-folder\com.package\target\classes -Dtest_dir=src/test/java
  4. mvn clean install
  5. mvn test
  6. mvn clean test jacoco:report

Ответ или решение

Проблема с получением 0% покрытия кода в отчёте JaCoCo может быть вызвана несколькими факторами, особенно в контексте использования OSGi и Java 11. Ниже приведены возможные причины и рекомендации по их устранению.

1. Неправильная конфигурация JaCoCo

Убедитесь, что плагин JaCoCo правильно настроен в вашем pom.xml. Ваши конфигурации выглядят в целом правильно, но важно убедиться, что:

  • Подготовка агента JaCoCo выполняется перед запуском тестов. Это должно выглядеть так:
    <execution>
    <goals>
        <goal>prepare-agent</goal>
    </goals>
    </execution>
  • Плагин JaCoCo должен быть настроен на выполнение после тестов:
    <execution>
    <id>report</id>
    <phase>verify</phase>
    <goals>
        <goal>report</goal>
    </goals>
    </execution>

2. Ошибки в генерации тестов

Вы используете EvoSuite для генерации тестов, и важно удостовериться, что сгенерированные тесты действительно выполняют код, который вы хотите проверить. Проверьте:

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

3. Путь к классам

Путь к классам и использование classpath является критически важным в OSGi среде. Убедитесь, что вы передаёте правильный classpath в EvoSuite и JaCoCo. Путь -DprojectCP=${project.build.outputDirectory} должен указывать на выходной каталог сборки вашего проекта.

4. Запуск тестов

Обратите внимание на порядок выполнения команд. Убедитесь, что команды для запуска тестов содержат а также параметры JaCoCo:

mvn clean test
mvn jacoco:report

Запуск тестов должен проходить после подготовки агента JaCoCo, чтобы информация о покрытии кода могла быть собрана.

5. OSGi специфика

Работа с OSGi может вызвать некоторые сложности:

  • Убедитесь, что ваши классы и пакеты правильно экспортируются. Проверьте настройки вашего манифеста OSGi.
  • Возможно, стоит попробовать использовать другие инструменты покрытия кода, такие как Cobertura или Bndtools, которые могут быть более совместимыми с OSGi.

6. Проверка отчёта JaCoCo

Если после всех проверок покрытие все равно составляет 0%, можно попробовать:

  • Генерировать отчет в формате HTML или XML и проверить детали отчёта.
  • Проверить логи выполнения Maven на наличие ошибок или предупреждений, которые могут дать подсказку по проблеме.
  • Убедиться, что чистка проекта (mvn clean) проходит успешно перед каждой сборкой.

7. Рассмотреть альтернативные стратегии

Если вы не можете найти решение, рассмотрите альтернативные подходы для тестирования и анализа покрытия, такие как:

  • Написание пользовательских тестов с использованием JUnit или TestNG.
  • Использование других инструментов генерации тестов, если EvoSuite не генерирует подходящие тесты.

Если после выполнения всех этих рекомендаций проблема сохраняется, возможно, стоит рассмотреть возможность обращения в сообщества поддержки или на форумы, такие как Stack Overflow, предоставляя все соответствующие детали вашей конфигурации и возникающие ошибки.

Оцените материал
Добавить комментарий

Капча загружается...