2017-01-24 22 views
0

Мы используем jacoco, но на разных сборках и разных машинах, но тот же сценарий кода и градиента, он дает разные результаты. Проблема, кажется, анонимные классы - они иногда не выстраиваются в тестовый прогон - хотя все это делается как часть того же самого, чистая, сборка. Мы получаем следующее:Покрытие Jacoco несовместимо с анонимными классами

[ant:jacocoReport] Classes in bundle 'SomeThing' do no match with execution data. For report generation the same class files must be used as at runtime. 
[ant:jacocoReport] Execution data for class a/b/c/$Mappings$1 does not match. 
[ant:jacocoReport] Execution data for class a/b/c/$Mappings$3 does not match. 

так что это похоже на то, что анонимные классы не синхронизированы. Любая идея, как это исправить? Это действительно противоречит нашим правилам, так как мы имеем, например, требование покрытия класса 100%, и это означает, что некоторые классы показывают иногда, так как они не охвачены.

ответ

0

Для создания отчета на основе файла jacoco.exec JaCoCo выполняет анализ байт-кода, то есть скомпилированных классов.

Различные версии Java-компилятора производят разные байт-коды. Даже перекомпиляция может привести к возникновению другого байт-кода - см. https://bugs.openjdk.java.net/browse/JDK-8067422 и https://github.com/jacoco/jacoco/issues/383.

Если классы, используемые во время выполнения (при создании jacoco.exec), различны (например, созданы на другом компьютере с другим компилятором), то они не могут быть связаны с классами, используемыми при создании отчета, что приводит к сообщению Execution data for class ... does not match. Вы можете узнать больше о идентификаторах классов в JaCoCo documentation.

В целом, чтобы избежать этого сообщения - используйте точные файлы классов во время создания jacoco.exec и во время генерации отчета.

+0

вот что - мы говорим о одном сценарии градиента на одной машине - он очищает, строит, тестирует, создает отчет - нет места для разных файлов классов или байтового кода. И это всегда происходит с анонимными классами –

+0

@DarrenOakey Тогда лучшим будет извлечение/создание небольшого репродуктора (http://stackoverflow.com/help/mcve). Исследования будут намного проще, быстрее и глубже в присутствии репродуктора, как вы можете видеть на примерах https://github.com/jacoco/jacoco/issues/383, https://github.com/jacoco/jacoco/issues/ 394 и https://github.com/jacoco/jacoco/pull/462 – Godin

+0

@DarrenOakey Альтернативно используйте параметр агента "classdumpdir" (http://www.jacoco.org/jacoco/trunk/doc/agent.html), чтобы получить файл класса несоответствующего класса, который был замечен агентом, и предоставить его вместе с файлом класса, который у вас есть на диске во время генерации отчета. И в любом случае укажите версии JVM и JaCoCo. – Godin

 Смежные вопросы

  • Нет связанных вопросов^_^