当前位置:网站首页 > Java基础 > 正文

java emma教程



EMMA 是一个开源、面向 Java 程序测试覆盖率收集和报告工具。它通过对编译后的 Java 字节码文件进行插装,在测试执行过程中收集覆盖率信息,并通过支持多种报表格式对覆盖率结果进行展示。 EMMA 所使用的字节码插装不仅保证 EMMA 不会给源代码带来“脏代码”,还确保 EMMA 摆脱了源代码的束缚,这一特点使 EMMA 应用于功能测试成为了可能。

 
  

这样指定maven-surefire-plugin的版本为2.8.1,false不跳过测试,/*Test.java只测试以Test.java为文件名结尾的文件,而且不测试/Roo文件名包含Roo的文件。更多的配置可以去查看maven-surefire-plugin的配置说明http://maven.apache.org/plugins/maven-surefire-plugin/。

查看测试报告

这时,我们只能求助于 Offline 模式。下面用maven的运行方式来介绍一下。

  1. 字节码插装并生成插装的元信息文件coverage.em
  2. 运行测试
  3. 每次当 JVM 停止时,内存中记录的执行信息将被清除并被保存到 “coverage.ec” 的文件中。
  4. 生成测试报告。
    插装字节码
    emma执行是最重要的就是插装字节码:
    emma_8
    emma循环调用handleFile()方法来遍历目录下所有以'.class'结尾的文件,然后使用 classParser类得到要插装的组件










 
  

offline模式的插装会生成全新的class文件,默认放在target/generated-classes下。以下是原java文件和插装后的class反编译的java文件。

 
  

插装字节码之后反编译的代码

 
  

反编译有些问题,但我们可以看出,emma在每个方法的入口和出口和转移指令之前如return、break、continue都加入了监测代码,并在最后把代码的执行情况通过RT.r()方法加载到内存的m_coverageMap中。

 
  
 
  

DataFactory.persist (cdataView, outFile, merge); cdataView是CoverageData型,有一个重要的成员变量就是上面说的m_coverageMap,没错,就是在这里把存在内存中的测试覆盖率信息持久化到文件中。

 
  

emma_10

 
  

三种ReportGenerator都实现了IReportGenerator接口的process方法来到处报告,而process方法又分别调用了各种重载的visit()方法。当maven生成html测试报告是,只用了生成概要覆盖信息、源文件测试覆盖信息、包测试覆盖信息的方法。

  • emma官方网站
  • 使用 EMMA 测量测试覆盖率
  • 可爱的EMMA:测试覆盖率工具

版权声明


相关文章:

  • java web开发教程pdf2025-12-02 14:02:00
  • java代码教程视频2025-12-02 14:02:00
  • java spring 4教程2025-12-02 14:02:00
  • java包详细教程2025-12-02 14:02:00
  • java拉勾教程2025-12-02 14:02:00
  • 阿里java视频教程2025-12-02 14:02:00
  • java设计与实践教程2025-12-02 14:02:00
  • java23教程2025-12-02 14:02:00
  • java421教程全集2025-12-02 14:02:00
  • java开发教程视频教程2025-12-02 14:02:00