使用 EMMA 测量测试覆盖率
?
下面,我们开始来为我们的工程编写 Ant 脚本。
清单1设置一些属性,包括源文件,二进制文件,JUnit 报告,覆盖率报告等的路径
?
其中目录${ bin.instrument.dir }存放被注入字节码的类,"emma.lib" 指向 emma 资源所在的位置。
清单2为 ANT 定义 EMMA 任务
清单3编译源代码和测试代码
?
编译分两阶段,先编译源代码,然后再编译测试用例代码。
清单4在所要测试类的代码中插入字节码
?
当${emma.enabled}为 true 时,才生成插入字节码的类。<instr>中指定了要 instrument 的类的地址, instrumented 后类存放的地址,以及 metadata 存放的地址。
清单5运行测试用例,得到一些生成报告的元数据
?
在运行测试用例前,需要设置 jvmarg。所有的测试用例都跑在 instrumented 的类上面。
清单6生成 JUnit 报告
清单7生成覆盖率报告
?
<report>中 sourcepath 指明源代码所在的位置,以便能够显示每行代码的覆盖情况。Sort指明生成列表的排列顺序,"+"表示升序,"-"表示降序。Metrics 可为每个度量指明一个覆盖率阈值,若未达到该阈值,则该行会被标记出来(前提是报告的形式支持这个功能,如 HTML)。<html>指明以 HTML 形式生成报告,Depth 指明报告的详细程度,columns 指明生成列表列名的排列顺序。
?图3包层次的报告
?图4类层次的报告
?图5用颜色标记的源代码
?你会发现有三种颜色,绿色,红色和黄色,它们分别表示该行:被测试到,未被测试到,以及部分被测试到。红色或黄色的部分是需要引起你注意的,bug 也许就隐藏在这部分代码中,你所需做的就是设计一些测试用例,使它们运行以前未被执行到的语句。如上面那张图给出了我们一些信息,String 中含有"+"号的情况未被测试到,还有"isPositive"只被测试到 true 或 false 的一种情况,你需要相应的增加一些测试用例。运行新加的测试用例,你也许会发现一些新的 bug,并修正这些 bug。
?清单10 修正代码的 Bug结束语
为你的项目生成覆盖率报告,EMMA 是个不错的选择。通过覆盖率报告,我们能发现并修复一些隐藏的 bug,我们的软件会变得更强壮。