Tba*_*ams 1 android code-coverage jacoco eclemma android-gradle-plugin
我们有一个Android应用程序,我们正在使用Gradle/Android Studio构建,并使用JaCoCo为我们的单元测试生成代码覆盖率报告; 这很有效.我们也有兴趣为手动测试生成覆盖率报告; 也就是说,显示任意应用程序启动中涵盖的代码.似乎JaCoCo的前任EclEmma能够做到这一点,但我无法找到任何关于JaCoCo的确认方式(尽管我开始假设它不可能因为缺乏话语).
我尝试过使用Eclipse中的EclEmma只是为了得到一些东西,但是最新的版本因为这个错误而失败了,我也无法立即使旧版本工作.
任何人都可以确认是否可以使用JaCoCo在任意应用程序启动时生成覆盖数据?如同,运行应用程序,按下按钮,关闭应用程序并获得有关您按下的按钮执行了哪些代码的报告.如果没有,是否有另一种工具可以实现这一目标?
谢谢!
小智 6
apply plugin: 'jacoco'
def coverageSourceDirs = [
'../app/src/main/java'
]
jacoco{
toolVersion = "0.7.4.201502262128"
}
task jacocoTestReport(type: JacocoReport) {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree("enter code here"
dir: './build/intermediates/classes/debug',
excludes: ['**/R*.class',
'**/*$InjectAdapter.class',
'**/*$ModuleAdapter.class',
'**/*$ViewInjector*.class'
])
sourceDirectories = files(coverageSourceDirs)
executionData = files("$buildDir/outputs/code-coverage/connected/coverage.exec")
doFirst {
new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
//这是报告的
debug {
testCoverageEnabled true
}
Run Code Online (Sandbox Code Playgroud)
//这是离线的
将这些添加到build.gradle文件中.
将目录"resources"添加到app> src> main
将jacoco-agent.properties文件添加到资源.
将destfile =/sdcard/coverage.exec写入文件jacoco-agent.properties
现在将此类添加到您的项目中.
public class jacoco {
static void generateCoverageReport() {
String TAG = "jacoco";
// use reflection to call emma dump coverage method, to avoid
// always statically compiling against emma jar
String coverageFilePath = "/sdcard/coverage.exec";
java.io.File coverageFile = new java.io.File(coverageFilePath);
try {
Class<?> emmaRTClass = Class.forName("com.vladium.emma.rt.RT");
Method dumpCoverageMethod = emmaRTClass.getMethod("dumpCoverageData",
coverageFile.getClass(), boolean.class, boolean.class);
dumpCoverageMethod.invoke(null, coverageFile, false, false);
Log.e(TAG, "generateCoverageReport: ok");
} catch (Exception e) {
new Throwable("Is emma jar on classpath?", e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当你的应用程序是onDestroy时调用该函数
jacoco.generateCoverageReport();
你可以运行你的应用程序.测试时可以使用命令"adb pull /sdcard/coverage.exec yourapp/build/outputs/code-coverage/connected/coverage.exec".
最后一个操作运行gradle任务定义上面有"jacocoTestReport".
好.全部完成.在"yourapp/build/reports/jacoco/jacocoTestReport/html /"中打开index.html.
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |