在AndroidStudio配置
1.build.gradle理配置
buildTypes {
debug{
testCoverageEnabled true
}
}
2.在androidTest目录下创建类,继承ApplicationTestCase,实现构造方法
public ApplicationTest() {
super(Application.class);//自动生成的是application,执行后Class has no public constructor TestCase(String name) or TestCase() while running my Cucumber scenario
}
3.在Terminal执行 ./gradlew createDebugCoverageReport,等待输出BUILD SUCCESSFUL
4.在/app/build/reports/androidTests/connected下的html看测试类的执行结果
/app/build/reports/coverage/debug看除了测试类的执行结果
将数据导出生成文件
1.build.gradle配置
apply plugin: 'jacoco'
def coverageSourceDirs = [
'../app/src/main/java'
]
task jacocoTestReport(type: JacocoReport) {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}
classDirectories = fileTree(
dir: './build/intermediates/classes/debug',
excludes: ['**/R*.class',
'**/*$InjectAdapter.class',
'**/*$ModuleAdapter.class',
'**/*$ViewInjector*.class'
])
additionalSourceDirs = files(coverageSourceDirs)
sourceDirectories = files(coverageSourceDirs)
executionData = files("$buildDir/outputs/coverage.ec")
doFirst {
new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
2.写入和导出文件
//初始化时创建文件
String DEFAULT_COVERAGE_FILE_PATH = "/mnt/sdcard/coverage.ec";
File file = new File(DEFAULT_COVERAGE_FILE_PATH);
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Log.d(TAG, "sd卡可使用");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//销毁时将数据写入文件
OutputStream out = null;
try {
out = new FileOutputStream("/mnt/sdcard/coverage.ec", false);
Object agent = Class.forName("org.jacoco.agent.rt.RT")
.getMethod("getAgent")
.invoke(null);
out.write((byte[]) agent.getClass().getMethod("getExecutionData", boolean.class)
.invoke(agent, false));
} catch (Exception e) {
Log.d(TAG, e.toString(), e);
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
生成apk后,进行手动测试,测试完毕后使用adb pull /sdcard/coverage.ec d:\test 进行导出,然后将ec文件放到./build/outputs目录下,执行命令:gradlew jacocoTestReport,然后就可以在app/build/reports/jacoco看报告了.
发现:
1.记录的执行的行号,旧的ec文件,新代码,生成报告会发生错位
2.在gradle可以根据配置更改生成文件的位置
3.可以通过命令将生成的ec文件转为报表展示