2016-09-22 3 views
1

Есть ли способ увидеть результаты JaCoCo по байт-коду, чтобы вы знали, какие фактические инструкции по байт-коду они еще не охвачены. Отчет по умолчанию несколько бесполезен, поскольку он говорит только о 1 из 9 филиалов.Результаты JaCoCo на байткоде

+0

Но jacoco предоставляет подробный отчет html. То, о чем вы упоминаете, - это итоговый отчет, нажимающий на имя класса, и он перейдет к фактическому исходному html и выделит строки кода, которые еще не были охвачены. –

+0

@ Химаншу Бхардвадж нет, не знаю. Я рассказываю о подробном отчете. Но если у вас есть, если это проверяет три условия, а подробный отчет просто говорит о «1 из 6» ветвей пропущенных, это никоим образом не помогает. Просмотр аннотированного байт-кода будет. – Vampire

+0

Вы действительно хотите увидеть покрытие отдельных исполняемых сегментов в строке, содержащей один или несколько условных обозначений. Такие инструменты, как JaCoCo, не имеют этой функции и, вероятно, никогда не будут (в соответствии с их запланированными дорожными картами). Однако инструмент покрытия JMockit показывает индивидуальный охват сегмента (хотя он еще не идеален во всех случаях). –

ответ

0

JaCoCo отображает покрытие на исходные линии. Этого может быть недостаточно, если ваш код очень сложный, и у вас много ветвей на строку (если однострочники, чрезмерное использование оператора??).

Если вы действительно хотите охват каждого байт-кода, вы можете как-то предварительно обработать ваши источники. Первой идеей, которая пришла мне в голову, была «разобрать java с javap, а затем собрать», но few years ago it wasn't possible и быстрый поиск в google для «java-ассемблера» не дали никаких ценных результатов.

Если ваши «линии» не легко покрываются испытаниями, возможно, это признак того, что вам нужно переписать этот фрагмент кода?

+0

Не думаю, что 'while (условиеA && conditionB && conditionC)' слишком сложный код. Но информация '1 из 6 филиалов пропустила' просто недостаточно. – Vampire

+0

Хорошо, может быть, у вас есть мертвый код в этих условиях? Более сильные проверки раньше? Пример: while (it.hasNext() && it! = Null) {...} Findbugs и Sonar должны быть в состоянии найти их. – okutane

+0

Нет, не знаю. Я уже нашел недостающий код и смог увеличить охват до 100% охвата филиалов. Но утомительно вводить каротаж, а затем правильно интерпретировать его. Было бы намного проще, если бы я мог посмотреть на него в байте-коде. Вы уверены, что сопоставление покрытия с линиями уже выполняется во время записи, а не во время анализа файла 'exec'? Потому что, если информация находится в файле 'exec', некоторый инструмент должен иметь возможность преобразовать его в отчет. – Vampire