我有一个简单的
android项目与测试用例.
ProjNameProject --build.gradle --ProjName ----build.gradle
我看到默认情况下android的新建系统默认提供基本的测试结果. (万岁!)
现在我也想看代码覆盖.我知道如何使用Emma和Ant脚本进行设置,但是我不想在这里运行Ant脚本.我觉得这会打败我使用新的构建系统的目的.
我尝试过几个在Github上发现的Cobertura插件.特别是:
https://github.com/stevesaliman/gradle-cobertura-plugin
但是,如果我尝试在ProjName构建文件中使用该插件,那么我会收到关于java插件的错误.我在tools.android.com上阅读,添加java插件会产生这种行为.我没有应用它,所以cobertura插件必须是.如果我尝试使用主要构建文件中的插件,那么我看不到java错误,但现在我看到:
Could not find net.sourceforge.cobertura:cobertura:1.9.4.1. required by: :ProjNameProject:unspecified
我该怎么办??
解决方法
JaCoCo支持被添加到Android毕业插件v0.10(
http://tools.android.com/tech-docs/new-build-system).
Enable in the tested Build Type with testCoverageEnabled = true android { jacoco { version = '0.6.2.201302030002' } }
我能够在http://chrisjenx.com/gradle-robolectric-jacoco-dagger/之后获得JaCoCo的覆盖与Robolectric的合作.
apply plugin: 'android' apply plugin: 'robolectric' apply plugin: 'jacoco' dependencies { compile fileTree(dir: 'libs',include: '*.jar') compile 'com.android.support:appcompat-v7:19.1.+' androidTestCompile fileTree(dir: 'libs/test',include: '*.jar') androidTestCompile 'junit:junit:4.11' androidTestCompile 'org.robolectric:robolectric:2.3' androidTestCompile 'com.squareup:fest-android:1.0.+' } robolectric { // Configure the set of classes for JUnit tests include '**/*Test.class' exclude '**/*AbstractRobolectricTestCase.class' // Configure max heap size of the test JVM maxHeapSize = "2048m" } jacoco { toolVersion = "0.7.1.201405082137" } //Define coverage source. //If you have rs/aidl etc... add them here. def coverageSourceDirs = [ 'src/main/java','src/gen' ] ... // Add JaCoCo test reporting to the test task // http://chrisjenx.com/gradle-robolectric-jacoco-dagger/ task jacocoTestReport(type: JacocoReport,dependsOn: "testDebug") { group = "Reporting" description = "Generate Jacoco coverage reports after running tests." reports { xml.enabled = true html.enabled = true } // Class R is used,but usage will not be covered,so ignore this class from report classDirectories = fileTree( dir: './build/intermediates/classes/debug',excludes: ['**/R.class','**/R$*.class' ]) sourceDirectories = files(coverageSourceDirs) executionData = files('build/jacoco/testDebug.exec') }