2016-08-24 61 views
0

我有一個問題,我的jacoco可以覆蓋androidTest目錄而不是測試目錄。我怎樣才能讓jacoco也覆蓋測試目錄。Jacoco只涵蓋androidTest目錄不能在Android Studio中測試。我該怎麼辦?

這是我的gradle這個

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

當我運行gradlew createDebugCoverageReport。有效。但只有AndroidTest覆蓋。不是。在Android Studio項目中,只有androidTest目錄覆蓋,測試目錄沒有涉及。

回答

0

最後,我用android-junit-jacoco-plugin。這個插件解決了我的問題。但是,如果你使用這個插件,該單元測試必須全部成功。否則,覆蓋報告將不會由jacoco創建。

0

這裏是我的jacoco安裝程序,它不僅涵蓋了androidTest目錄,還能夠處理不同的風格。

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:

apply from: "jacoco.gradle" 
+0

Thanks.It爲我工作! –

+0

對不起,它還沒有工作。它還涵蓋了AndroidTest目錄(package/app/src/androidTest)。當我刪除AndroidTest目錄中的testCase時,它也覆蓋了0%。不過,我在測試目錄(package/app/src/test)中使用Junit編寫了testCase。 –

+0

我跑了gradlew任務。它顯示connectedAndroidTest - 爲連接的設備上的所有口味安裝並運行儀器測試並測試 - 爲所有變體運行單元測試。我的意思是我要雅可也不僅包括單元測試,還包括儀器測試。 –

相關問題