Jacoco入门

本文介绍了如何在Android Studio中配置Jacoco,包括在build.gradle中的设置,创建测试类,执行测试报告生成,并详细说明了如何导出数据文件,通过adb工具将覆盖率数据从设备中拉出,以及如何生成和查看Jacoco测试报告。同时,文章指出在使用过程中可能遇到的行号错位问题和配置调整选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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文件转为报表展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值