Intereting Posts
Как заставить приложение Android вернуться к последнему открытому действию при перезапуске? InstantiateItem в PagerAdapter и AddView в замешательстве ViewPager Где я могу поместить папку «assets» в Android Studio? Должен ли я объявлять как WRITE_EXTERNAL_STORAGE, так и READ_EXTERNAL_STORAGE? Отображение активности с пользовательской анимацией Как установить непрозрачность фигуры? Как изменить версию Android и номер версии кода в Android Studio? Обеспечение связи с мобильным приложением? Ошибка ADB и Genymotion: «Сервер adb устарел. Убийство … невозможно связать 'tcp: 5037' Сервер ADB не ACK " Как защитить строку в приложении Android? URL-адрес исходной папки? Java.lang.NoClassDefFoundError: com.google.ads.AdView Может ли приложение Android напрямую подключаться к онлайн-базе данных mysql ViewPager с фрагментами внутри PopupWindow (или DialogFragment) – ошибка не найдена для id для фрагмента Gradle build не работает: выполнение не выполнено для задачи ': MyApp: compileDebug'

Как получить отчет о покрытии 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/