2015-05-21 3 views
3

Я получаю нулевое покрытие кода, сообщается в группе избранных классов, при запуске плагина Jacoco от Gradle. Я подтвердил, что все модульные тесты, которые тестируют эти классы, успешно работают.Gradle Jacoco Plugin Reporting Zero Coverage

Что очень интересно, так это то, что EclEmma, ​​в Eclipse, генерирует правильные результаты покрытия кода. Я подтвердил, что оба инструмента используют ту же версию Jacoco.

Я пытаюсь выяснить, какая разница между этими двумя инструментами? Нужна ли мне дополнительная конфигурация плагина Gradle Jacoco.

Edit: Мой выход Gradle Jacoco показывает "Выполнение данных для класса ком/.... не соответствует"

Update: Я открыл test.exec файл Jacoco генерирует, в Eclipse. Он показывает классы с отсутствующим покрытием, в которых выполнено 80% их зондов.

ответ

1

Это, вероятно, означает, что плагин jacoco неправильно настроен в градиенте. Здесь вы можете найти перечень наиболее распространенных ошибок с Jacoco и Gradle (Благодаря четкому ответу Taeho Кима): https://stackoverflow.com/a/23965581/2166900

Кроме того, здесь конфигурация, которую я использовал в своем последнем проекте Android и который работал на меня:

apply plugin: 'jacoco' 

jacoco { 
    toolVersion = "0.7.2.+" 
} 

def coverageSourceDirs = [ 
     'src/main/java' 
] 

task jacocoTestReport(type:JacocoReport, dependsOn: "testDebug") { 
    group = "Reporting" 

    description = "Generate Jacoco coverage reports" 

    classDirectories = fileTree(
      dir: 'build/intermediates/classes/debug', 
      excludes: ['**/R.class', 
         '**/R$*.class', 
         '**/*$ViewInjector*.*', 
         '**/BuildConfig.*', 
         '**/Manifest*.*'] 
    ) 

    additionalSourceDirs = files(coverageSourceDirs) 
    sourceDirectories = files(coverageSourceDirs) 
    executionData = files('build/jacoco/testDebug.exec') 

    reports { 
     xml.enabled = false 
     html.enabled = true 
    } 
} 
+0

К сожалению, это не сработало. Я должен уточнить, что файлы отображаются в отчетах; однако они не показывают, что код не попал. EclEmma действительно показывает, что код попал. Мне интересно, является ли это проблемой Java 8 с плагином Gradle Jacoco. Файлы с проблемами все используют потоки Java 8. Спасибо – Eric

+0

Извините, я неправильно понял вопрос, я думал, что ни один из классов не показывал покрытие кода. Вы использовали Jacoco 0.7.2 или новее? Именно тогда они добавили поддержку лямбда-выражений. Вот список изменений в Jacoco: http://www.eclemma.org/jacoco/trunk/doc/changes.html – GoGoris

+0

Да, мы используем 0.7.5. Мы просто пытались переключиться с лямбда на двойные двоеточия, и это поставило проблему. Новейшие версии jacoco должны обрабатывать lambdas, поэтому я не уверен, в чем проблема. Я опубликовал на форумах Gradle, поэтому я посмотрю, что они говорят. Благодаря! – Eric

0

У меня была такая же проблема при переключении на оболочку градиента, но продолжалась работа с jacoco с градиентом. Запуск jacoco с помощью оболочки градиентов решил проблему.

This stackoverflow accepted answer помог мне выяснить, что я пропустил.