Вопрос или проблема
У меня 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 для разработки. Хотя тесты, похоже, выполняются без проблем, отчет о покрытии не отражает фактического выполнения тестов и не показывает покрытия. Я ожидаю получить корректный отчет о покрытии кода, который точно отражает испытуемые строки кода, включая такие детали, как покрытие ветвлений и методов. Кроме того, я хотел бы понять, почему отчет не генерируется или не показывает ни какого покрытия, несмотря на то, что тесты явно были выполнены. Для меня важно, чтобы инструмент покрытия интегрировался без проблем с моей текущей настройкой, так как мне нужно убедиться, что каждая часть приложения хорошо протестирована. В данный момент я не ищу решение, просто пытаюсь лучше понять потенциальные причины, по которым это может происходить.
Команды, которые я запускаю
- mvn clean install
- mvn dependency:build-classpath “-DincludeScope=runtime” “-Dmdep.outputFile=classpath.txt”
- 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
- mvn clean install
- mvn test
- 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, предоставляя все соответствующие детали вашей конфигурации и возникающие ошибки.