2016-08-24 8 views
0

私はjacocoがandroidテストディレクトリをカバーすることができるという質問を持っています。どうすればjacocoもテストディレクトリをカバーすることができます。Android StudioでAndroid用テストディレクトリはテストされていません。どうすればいいですか?

私はgradlew createDebugCoverageReportを実行すると、これは私のGradle

apply plugin: "jacoco" 
buildTypes { 
    debug{ 
     testCoverageEnabled true 
    } 
} 
jacoco { 
toolVersion = "0.7.6.201602180812" 
reportsDir = file("$buildDir/customJacocoReportDir")} 

です。出来た。しかし、AndroidTestだけがカバーしています。ジュニットはいません。 Android Studioのプロジェクトでは、androidTestディレクトリのみが対象となり、テストディレクトリはカバーされません。

答えて

0

、ユニットテストはすべて成功しなければなりません。そうでなければ、カバレッジレポートはjacocoによって作成されません。

0

ここではandroidTestディレクトリだけでなく、さまざまな味を扱うことができる私のjacocoの設定です。

apply plugin: 'jacoco' 

jacoco { 
    toolVersion = "0.7.7.201606060606" 
} 

project.afterEvaluate { 
// Grab all build types and product flavors 
def buildTypes = android.buildTypes.collect { type -> 
    type.name 
} 
def productFlavors = android.productFlavors.collect { flavor -> 
    flavor.name 
} 
// When no product flavors defined, use empty 
if (!productFlavors) productFlavors.add('') 
productFlavors.each { productFlavorName -> 
    buildTypes.each { buildTypeName -> 

     // If buildtype and flavor combo is not available, skip 
     if (ignoreBuildFlavor(productFlavorName, buildTypeName)) { 
      return 
     } 

     def sourceName, sourcePath 
     if (!productFlavorName) { 
      sourceName = sourcePath = "${buildTypeName}" 
     } else { 
      sourceName = "${productFlavorName}${buildTypeName.capitalize()}" 
      sourcePath = "${productFlavorName}/${buildTypeName}" 
     } 
     def testTaskName = "test${sourceName.capitalize()}UnitTest" 
     // Create coverage task of form 'testFlavorTypeCoverage' depending on 'testFlavorTypeUnitTest' 
     task "${testTaskName}Coverage"(type: JacocoReport, dependsOn: "$testTaskName") { 
      group = "Reporting" 
      description = "Generate Jacoco coverage reports on the ${sourceName.capitalize()} build." 
      classDirectories = fileTree(
        dir: "${project.buildDir}/intermediates/classes/${sourcePath}", 
        excludes: ['**/R.class', 
           '**/R$*.class', 
           '**/*$ViewInjector*.*', 
           '**/*$ViewBinder*.*', 
           '**/BuildConfig.*', 
           '**/Manifest*.*', 
           '**/*$Lambda$*.*', // Jacoco can not handle several "$" in class name. 
           '**/*$inlined$*.*', // Kotlin specific, Jacoco can not handle several "$" in class name. 
           '**/*Module.*', // Modules for Dagger. 
           '**/*Dagger*.*', // Dagger auto-generated code. 
           '**/*MembersInjector*.*', // Dagger auto-generated code. 
           '**/*_Provide*Factory*.*',// Dagger auto-generated code. 
           '**/*$Icepick*.*'] 
      ) 
      def coverageSourceDirs = [ 
        "src/main/java", 
        "src/$productFlavorName/java", 
        "src/$buildTypeName/java" 
      ] 
      additionalSourceDirs = files(coverageSourceDirs) 
      sourceDirectories = files(coverageSourceDirs) 
      executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec") 
      reports { 
       xml.enabled = true 
       html.enabled = true 
      } 
     } 
    } 
} 

そして、あなたのbuild.gradleに次の行を追加することを忘れないでください:最後に、私はあなたがこのプラグインを使用する場合android-junit-jacoco-plugin .Thisプラグインは私のproblem.Butを解く使用

apply from: "jacoco.gradle" 
+0

ありがとう、私のために働いた! –

+0

申し訳ありませんが、まだ機能していません。また、AndroidTestディレクトリ(package/app/src/androidTest)についても説明しました。AndroidTestディレクトリのtestCaseを削除すると、0%もカバーしています。しかし、テストディレクトリ(package/app/src/test)でJunitを使ってtestCaseを書いていました。 –

+0

私はgradlewタスクを実行しました。 connectedAndroidTest - 接続されたデバイスのすべてのフレーバーのインストルメンテーションテストをインストールして実行します。テスト - すべてのバリアントのユニットテストを実行します。私はジャココにユニットテストだけでなく、計装テストをカバーしたいと思うことを意味します。 –

関連する問題