概念
Jacoco:JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等。
插桩:程序插桩,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”,本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。
On-the-fly插桩:JVM中通过-javaagent参数指定特定的jar文件启动Instrumentation的代理程序,代理程序在通过Class Loader装载一个class前判断是否转换修改class文件,将统计代码插入class,测试覆盖率分析可以在JVM执行测试代码的过程中完成。
Offline模式:在测试前先对文件进行插桩,然后生成插过桩的class或jar包,测试插过桩 的class和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告。
注入方法
比较有特色的几个方法:
Instrumentation 注入
Byte Code 字节码注入(在Byte Code时使用的ASM技术修改字节码方法,可以修改Jar文件、class文件字节码文件,通过一个Probe探针的方式来注入,程序执行后可以被记录,它不会改变原有代码的行为)
On-the-fly 在线模式
Offline 离线模式
Eclipse EclEmma Plugin
目前支持的启动类型:
Local Java application java程序(有main)
Eclipse/RCP application 桌面应用程序
Equinox OSGi framework
JUnit test 单元测试
TestNG test
JUnit plug-in test
JUnit RAP test
SWTBot test
Scala application
安装
Eclipse:Help->Eclipse Marketplace->搜索EclEmma
java application覆盖测试
点击工具栏中的按钮(在此之前可能需要自己先运行一遍代码)。测试结果如下:
红色:测试未覆盖
黄色:测试部分覆盖(通常是if和switch)
绿色:测试已覆盖
查看测试率,Window->Show View->Other->Java->Coverage
通常情况下,Coverage显示的是单次的覆盖测试结果,如果想常看多次的合并结果,点击
Project Explorer中查看覆盖率,Window->Preferences->General->Appearence->Label Decorations,选中Java Code Coverage。
JUnit Test覆盖测试
右键一个需要测试的文件,new->JUnit->JUnit Test Case,完成一个测试类。选择测试类启动覆盖测试。结果如图:
生成覆盖率报告
File->Export->Java->Coverage Report->选择需要生成报告的测试源以及目标地址