Intereting Posts
Как связать ресурсы с Android на рабочем столе в libgdx? Как исправить "java.lang.ClassCastException: com.android.layoutlib.bridge.android.BridgeContext не может быть добавлен в исключение android.app.Activity" Как освободить (принудительно, если необходимо) 9-патч (NinePatchDrawable) из памяти на Android? Android WebView: удаление всплывающего окна в google drive / doc viewer Как передать экран Android Phone на ПК Ресурс Android strings.xml – арабский язык и строки с динамическим форматированием Android: идентификатор приложения Facebook показывает ошибку в значениях-ta / strings.xml и не может создать подписанный apk Может ли проект библиотеки Android иметь собственную базу данных SQLite? Почему приложение не подключается к устройству BLE при установке autoConnect на true в Android? Получение сообщений GTalk в собственном приложении? Механизм для приложений для отображения их содержимого изображения в родном 4k Ошибки сборки Gradle после обновления Android Studio OpenMP на iOS / Android Рекомендации по внедрению многоуровневого меню опций на Android? Как захватить трафик приложений на Android

Как получить отчет о покрытии jacoco с помощью плагина Android gradle 0.10.0 или новее?

Я пытаюсь получить отчет о тестировании с помощью плагина Gradle Android 0.10.2. Но я все еще не могу получить отчет о покрытии после запуска некоторых тестов. (ConnectedAndroidTest).

Мой основной модуль build.gradle:

apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.0.3" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 1 versionName "1.0" } buildTypes { debug { testCoverageEnabled true } release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:19.+' } 

И секция buildscript градиента построения проекта:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.10.+' } } 

Как только я запустил gradlew connectedAndroidTest с gradlew connectedAndroidTest с терминала, я могу найти coverage-instrumented-classes и папку code-coverage внутри папки build . Но я не могу найти папку coverage папке reports . (Только я вижу папку androidTests )

Есть ли недостаток в получении отчета о покрытии jacoco?

Solutions Collecting From Web of "Как получить отчет о покрытии jacoco с помощью плагина Android gradle 0.10.0 или новее?"

За сотни раз, ища ответ на получение отчета о покрытии, я наконец нашел точный ответ, что хочу.

Из этого сообщения в блоге я обнаружил, что gradlew createDebugCoverageReport создает отчет о покрытии jacoco.

Кроме того, из исходного кода плагина gradle плагин использует jacoco 0.6.2.201302030002 по умолчанию. (Поэтому определение версии jacoco не требуется, если вы собираетесь использовать версию по умолчанию)

Таким образом, ОСНОВНЫЕ шаги для получения jacoco покрытии jacoco с плагином Android-плагинов:

  1. Плагин Android gradle версии 0.10.0 или новее (как правило, в build.gradle вашего проекта)
  2. Add testCoverageEnabled true для типа сборки, который вы хотите (то есть debug )
  3. $ gradlew createDebugCoverageReport или gradlew connectedCheck чтобы получить jacoco покрытии jacoco .

Отчет о покрытии можно найти в build/reports/coverage/{buildType} . (Т. Е. build/reports/coverage/debug для сборки отладки)

(Добавьте многофакторный случай из комментария @ odiggity)

Если ваш проект использует конфигурацию с несколькими create{flavorName}CoverageReport , используйте вместо этого create{flavorName}CoverageReport . Отчет о покрытии будет создан при build/reports/coverage/{flavorName}/{buildType} .

Пример для вкуса krInternal с отладочным типом сборки:

  • Команда: ./gradlew createKrInternalDebugCoverageReport
  • Отчет генерируется по адресу: build/reports/coverage/krInternal/debug

Наконечник :

Поскольку вы можете получить отчет о покрытии с помощью emulator и device with root permission , после выполнения команды на обычном ( device with root permission вы получите следующую ошибку:

 05:48:33 E/Device: Error during Sync: Permission denied java.io.IOException: com.android.ddmlib.SyncException: Permission denied at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:114) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:158) at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:42) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:695) Caused by: com.android.ddmlib.SyncException: Permission denied at com.android.ddmlib.SyncService.doPullFile(SyncService.java:511) at com.android.ddmlib.SyncService.pullFile(SyncService.java:320) at com.android.ddmlib.Device.pullFile(Device.java:849) at com.android.builder.testing.ConnectedDevice.pullFile(ConnectedDevice.java:107) ... 10 more :myDirections:connectedAndroidTest FAILED FAILURE: Build failed with an exception. 

Должен добавить ответ вместо комментария, так как моя репутация ниже 50 …

Я хочу дополнить:

Google выпустил новые инструменты сборки, которые устраняют неприятную проблему «VerifyError» ( ссылка ).

Попробуйте изменить настройки в градиенте, чтобы использовать новейшие инструменты сборки, если вы столкнулись с проблемой «VerifyError». Например,

 android { ...... buildToolsVersion '21.1.1' ..... } 

Поскольку инструменты сборки 21.0.0 не работают, используйте версию более 21.0.0. Я использую 21.1.1.

Для этого я создал плагин с открытым исходным кодом .

Root build.gradle

 apply plugin: "com.vanniktech.android.junit.jacoco" buildscript { repositories { mavenCentral() } dependencies { classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.3.0' } } 

Затем просто выполните

 ./gradlew jacocoTestReportDebug // or jacocoTestReportRelease 

Он запустит тесты JUnit, а затем даст вам выход Jacoco в формате xml и html в соответствующем каталоге сборки для типа сборки отладки.

Если вы хотите использовать другую версию, чем значение по умолчанию, добавьте

 jacoco { version = '0.7.3.201502191951' } 

Внутри тега android в build.gradle вашего приложения.

Один из способов найти последний номер версии: найдите «org.jacoco: jacoco» в JCenter .

Gradle уже имеет встроенную поддержку для создания отчетов по охвату тестирования, и нам не нужно создавать какие-либо дополнительные конфигурации или добавлять какие-либо плагины для создания отчета по охвату тестирования. В основном, единственное, что нам нужно сделать, – установить testCoverageEnabled параметра testCoverageEnabled значение true в файле build.gradle следующим образом:

 android { buildTypes { debug { testCoverageEnabled = true } } } 

Затем мы можем выполнить следующую задачу Gradle из CLI:

 ./gradlew createDebugCoverageReport 

В Windows мы можем выполнить его следующим образом:

 gradlew.bat createDebugCoverageReport 

Задача будет анализировать код нашего проекта в каталоге /src/main/java/ и модульных тестах, помещенных в /src/androidTest/java/ . После выполнения этой задачи мы можем найти отчет по охвату тестирования в следующем каталоге модуля:

 /build/outputs/reports/coverage/debug/ 

Когда мы открываем файл index.html , мы можем видеть визуальный отчет из тестового покрытия, который можно просмотреть в веб-браузере.

Это выглядит как на изображении ниже.

Введите описание изображения здесь

Статья об отчете о тестировании в приложении для Android http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/