Я пытаюсь протестировать устаревшее приложение big fat EAR (app.ear) с помощью Arquillian и TestNG. Чтобы запустить тест, я добавил тестируемый файл войны (test.war) в существующий app.ear и удаленно развернул его на сервере WildFly 10.
@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 ………» < / em>
Исключение составляет только класс, содержащий тестовые примеры. Если я исключаю этот класс (CurrencyConverterTest.class) с помощью тега исключения в подключаемом модуле Jacoco Maven, исключение исчезает, но отчеты, созданные Jacoco, не содержат данных. Также я проверил файл jacoco.exec, и, насколько я могу сказать, он содержит достоверные данные.
Поскольку я не могу поделиться проприетарным кодом, с которым работаю, я создал три простых проекта на github, чтобы имитировать то же самое.
- Проект 1 (currencycoverter): в этом проекте есть один ejb без сохранения состояния с удаленным интерфейсом, имеющим три метода.
- Проект 2 (earapp): этот проект создает файл уха, используя проект 1 в качестве модуля ejb.
- Проект 3 (eartest): в этом проекте тестируется ухо, сгенерированное проектом 2.
Мне кажется, что в коде Jacoco есть какая-то ошибка, но я тоже могу ошибаться. Пожалуйста, помогите мне.
Обновление: Шаги по созданию проектов, опубликованных в репозитории git
Шаг 1. Проверьте все три проекта и импортируйте в eclipse как проекты eclipse.
Шаг 2. Запустите команду maven clean instll для проекта 1 (конвертер валют)
Шаг 3. Запустите команду maven clean package для проекта 2 (earapp). Это создаст файл Ear в целевом каталоге.
Шаг 4: Запустите WildFly 10 в автономном режиме на локальном компьютере.
Шаг 5. Запустите команду maven clean install для проекта 3 (самый ранний). Он будет использовать ухо, созданное на шаге 3, развернуть его на сервере приложений WildFly 10 и запустить тесты.