Jacocoコードカバレッジレポートを生成しようとしています。テストクラスにAndroidTestCaseを使用しました。
TestCoverageEnabled trueを使用し、デフォルトAndroid -studio default jacoco、./gradlew connectedCheckまたはcreateDebugCoverageReportを使用すると、成功/失敗テストケースの割合が作成されますが、カバレッジレポートは作成されません。
次に、jacoco {toolVersion "0.7.1.201405082137"}とタスクjacocoTestReport(type:JacocoReport、dependOn: "testDebug")を試しました。さまざまなタスクでdependOn値を変更しようとしました。レポートには0(ゼロ)のテストカバレッジが表示されますが、これはすべてのクラスの少なくとも半分がテストされるため不可能です。
過去数日間で、スタックオーバーフローに関するさまざまな受け入れられている答えに従いました。結果は負です。
私のgradleファイル:
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:1.0.0'
}
}
apply plugin: 'com.Android.application'
apply plugin: 'jacoco'
Android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "test.gradle.com.myapplicationtestgradle"
minSdkVersion 21
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(
'proguard-Android.txt'), 'proguard-rules.pro'
}
debug {
testCoverageEnabled true
}
}
jacoco {
version "0.7.1.201405082137"
}
packagingOptions {
exclude 'LICENSE.txt'
}
}
jacoco {
toolVersion "0.7.1.201405082137"
}
task jacocoTestReport(type:JacocoReport, dependsOn: "testDebug") {
group = "Reporting"
description = "Generate Jacoco coverage reports"
// exclude auto-generated classes and tests
def fileFilter = ['**/R.class', '**/R$*.class',
'**/BuildConfig.*', '**/Manifest*.*',
'Android/**/*.*']
def debugTree = fileTree(dir:
"${project.buildDir}/intermediates/classes/debug",
excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main/Java"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
additionalSourceDirs = files([
"${buildDir}/generated/source/buildConfig/debug",
"${buildDir}/generated/source/r/debug"
])
executionData = fileTree(dir: project.projectDir, includes:
['**/*.exec', '**/*.ec'])
reports {
xml.enabled = true
xml.destination = "${buildDir}/jacocoTestReport.xml"
csv.enabled = false
html.enabled = true
html.destination = "${buildDir}/reports/jacoco"
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('junit:junit:4.11') {
exclude module: 'hamcrest-core'
}
}
すでに動作しているようですが、単体テストの実行データを取得するためのより簡単な方法があります。私も最近これを検討していましたが、実際には完全に書き上げました 以前 。
私の状況では、既存のワークフローの一部としてレポートを生成したかったため、追加のGradleタスクを作成したくありませんでした。また、Jacocoプラグインを明示的に追加したくありませんでした。 Googleはすでにダップしています Instrumentation Testsのカバレッジレポート用のJacoco Antタスクです。
プロパティの設定に加えてAndroid.jacoco.version
およびbuildTypes.debug.testCoverageEnabled
、実行データを生成するためにtestDebug
JVM引数に次を追加しました。
project.afterEvaluate {
def append = "append=true"
def destFile = "destfile=$buildDir/outputs/code-coverage/connected/coverage.ec"
testDebug.jvmArgs "-javaagent:$buildDir/intermediates/jacoco/jacocoagent.jar=$append,$destFile"
createDebugCoverageReport.dependsOn testDebug
}
これにより、connectedAndroidTest
によって生成されたカバレッジファイルに単体テストの実行データが追加されるため、レポートには、各バリアントを個別にではなく、インストルメンテーションテストと単体テストの両方が反映されます。
connectedAndroidTest
はカバレッジファイルを上書きすることに注意してください。レポートを作成する際にこれを考慮してください。タスクtestDebug
に変更がなく、createDebugCoverageReport
を実行すると、インストルメンテーションテストのカバレッジのみが反映されます。そのため、ユニットテストに変更を加えます。ここではLinuxコマンドtouch
が便利かもしれませんが、まだ試していません。
Gradleにはテストカバレッジレポートを生成するためのサポートが既に組み込まれているため、テストカバレッジレポートを生成するために追加の構成を作成したり、プラグインを追加したりする必要はありません。基本的に、必要なことは、次のようにbuild.gradle
ファイルのtestCoverageEnabled
パラメーターをtrue
に設定することだけです。
Android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
次に、CLIから次のGradleタスクを実行できます。
./gradlew createDebugCoverageReport
Windowsでは、次のように実行できます。
gradlew.bat createDebugCoverageReport
タスクは/src/main/Java/
ディレクトリにあるプロジェクトのコードと/src/androidTest/Java/
ディレクトリにあるユニットテストを分析します。このタスクを実行した後、モジュールの次のディレクトリでテストカバレッジレポートを見つけることができます。
/build/outputs/reports/coverage/debug/
index.html
ファイルを開くと、テストカバレッジから視覚的なレポートを確認できます。これはWebブラウザーで表示できます。
下の画像のようになります。
Androidアプリケーションでテストカバレッジレポートに関する記事を書いて、しばらく前に私のブログに公開しました。そのトピックに興味がある場合は、次のURLで読むことができます。
更新(Robolectricテストの単体テストカバレッジ)
Robolectricで記述された単体テストからテストカバレッジレポートを作成し、Jacoco、Travis CIおよびCodecov.io、私のブログの新しい記事をご覧ください:
Android studio、Android sdk、gradle。その後、すべてを再インストールします。今日は完全に削除しましたAndroid studio、 Android sdk、gradle。その後、すべてを再インストールします。その後、アプリbuild.gradle内に追加しました。
debug {
testCoverageEnabled true
}
次に、。/ gradlew connectedChecを実行します。すべてが完璧に機能しています。 AndroidスタジオデフォルトのJacocoは私のためにうまく機能しています。jacocoTestReportタスクを作成してからコードカバレッジを作成することも可能だと思います。なぜgradleとAndroidスタジオは以前は機能していませんでした。
jacocoでコードカバレッジレポートをマージする正しい方法を調査しました。ここで確認できます: https://Gist.github.com/ultraon/54cca81ca159ed0a4a9ebf62e89c26ba
Gradle 3.2でAndroidStudio 2.2.2を使用し、Android Gradle Plugin 2.2.2