51Testing软件测试论坛

标题: android jacoco 统计多模块 [打印本页]

作者: 测试积点老人    时间: 2019-8-14 10:41
标题: android jacoco 统计多模块
本帖最后由 测试积点老人 于 2019-8-14 10:43 编辑

Android项目进行了模块化,手工运行完测试用例之后,jacoco只统计一个模块下面的代码覆盖,其它模块的统计出来的数据都是为0。
  1. build.gradle:

  2. apply plugin: "jacoco"

  3. def coverageSourceDirs = ['../app/src/']
  4. task jacocoTestReport(type: JacocoReport) {
  5. group = "Reporting"
  6. description = "Generate Jacoco coverage reports after running tests."
  7. reports {
  8. xml.enabled true
  9. html.enabled true
  10. }
  11. classDirectories = fileTree(
  12. dir: './build/intermediates/classes/product/debug',
  13. excludes: ['/R*.class',
  14. '/$InjectAdapter.class',
  15. '/$ModuleAdapter.class',
  16. '*/$ViewInjector*.class'
  17. ])
  18. sourceDirectories = files(coverageSourceDirs)
  19. executionData = files("$buildDir/outputs/code-coverage/connected/coverage.ec")
  20. doFirst {
  21. new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
  22. if (file.name.contains('[color=#222527][font=Helvetica, Arial, &quot][size=15px]覆盖数据都有,只是HTML文件显示代码都未运行,可以确认MainActivity是有运行的,但并未统计出来。求大神解答[/size][/font][/color]
  23. ))
  24. }
  25. }
  26. }
  27. }
复制代码
统计代码如下:
  1. OnCreate:
  2. String SDCARD_PATH = Environment.getExternalStorageDirectory().getPath();
  3. String DEFAULT_COVERAGE_FILE_PATH = SDCARD_PATH + "/coverage.ec";
  4. File file = new File(DEFAULT_COVERAGE_FILE_PATH);
  5. if (!file.exists()) {
  6. try {
  7. file.createNewFile();
  8. } catch (IOException e) {
  9. e.printStackTrace();
  10. }
  11. }

  12. OnDestroy:
  13. public void generateCoverageReport() {
  14. String SDCARD_PATH = Environment.getExternalStorageDirectory().getPath();
  15. String DEFAULT_COVERAGE_FILE_PATH = SDCARD_PATH + "/coverage.ec";
  16. Log.d("generateCoverageReport", "generateCoverageReport():" + DEFAULT_COVERAGE_FILE_PATH);
  17. OutputStream out = null;
  18. try {
  19. out = new FileOutputStream(DEFAULT_COVERAGE_FILE_PATH, false);
  20. Object agent = Class.forName("org.jacoco.agent.rt.RT").getMethod("getAgent").invoke(null);
  21. out.write((byte[]) agent.getClass().getMethod("getExecutionData", boolean.class).invoke(agent, false));
  22. } catch (Exception e) {
  23. Log.d("generateCoverageReport", e.toString(), e);
  24. } finally {
  25. if (out != null) {
  26. try {
  27. out.close();
  28. } catch (IOException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. }
  33. }
复制代码
覆盖数据都有,只是HTML文件显示代码都未运行,可以确认MainActivity是有运行的,但并未统计出来。求大神解答


作者: qqq911    时间: 2019-8-15 10:22
看看日志
作者: jingzizx    时间: 2019-8-15 11:49
有报错不
作者: 海海豚    时间: 2019-8-15 13:56
需要在每个模块中插桩才行




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2