Я пытаюсь протестировать устаревшее приложение с большим содержанием EAR (app.ear) с использованием Arquillian и TestNG. Чтобы запустить тест, я добавил тестовый файл войны (test.war) в существующее приложение и развернуто на сервере WildFly 10 удаленно.«IllegalStateException: Несовместимые данные выполнения для класса в ...» исключение из Jacoco при запуске для существующего уха
@Deployment
public static EnterpriseArchive createDeployment(){
return ShrinkWrap.createFromZipFile(EnterpriseArchive.class, new File("../earapp/target/earapp-0.0.1-SNAPSHOT.ear"))
.addAsModule(Testable.archiveToTest(ShrinkWrap.create(WebArchive.class, "test.war")
.addClass(CurrencyConverterTest.class)
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")));
}
Следующей частью моего требования является получение отчета о покрытии кода после запуска тестов. Для этого я использую Jacoco и запускаю его с плагином Jacoco Maven.
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.7.201606060606</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</plugin>
app.ear развертывается и даже тесты работает нормально, но когда речь идет о генерации отчёта Jacoco терпит неудачу с исключением и «IllegalStateException: Несовместимые данные исполнения для класса в Jacoco ...... ... "
Исключение распространяется только на класс, содержащий тестовые примеры. Если я исключаю этот класс (CurrencyConverterTest.class), используя исключение в плагине Jacoco Maven, исключение уходит, но отчеты, созданные Jacoco, не содержат данных. Также я проверил jacoco.exec и, насколько я могу судить, содержит достоверные данные.
Поскольку я не могу использовать собственный код, с которым я работаю, я создал три простых проекта на github, чтобы имитировать то же самое.
- Проект 1 (currencycoverter): Этот проект имеет один безгражданный ejb с дистанционным интерфейсом, имеющим три метода.
- Проект 2 (earapp): Этот проект создает файл уха, используя проект 1 как модуль ejb.
- Проект 3 (eartest): Этот проект тестирование уха, генерируемого проект 2.
Для меня это выглядит, что есть какая-то ошибка в коде Jacoco, но я мог бы быть неправильно тоже. Пожалуйста, помогите мне.
Update:шаги по созданию проектов, разделяемых мерзавца репо
Шаг 1: Проверьте все три проекта и импортировать в затмение, как затмение проектов.
Шаг 2: Запустите команду Maven чистый instll для проекта 1 (CurrencyConverter)
Шаг 3: Выполнить команду Maven чистый пакет для проекта 2 (earapp). Это создаст файл уха в целевом каталоге.
Шаг 4: Запустите WildFly 10 в автономном режиме на локальном компьютере.
Шаг 5: Запустите команду maven clean install для проекта 3 (eartest). Это будет использовать ухо, сгенерированное на шаге 3, и развернуть его на сервере приложений WildFly 10 и запустить тесты.
Поскольку Stackoverflow не позволяет мне добавить более двух ссылок в вопрос, ссылка на проект 1 https://github.com/keeshaaw/currencyconverter –