为了实验 EclEmma 的特性,我们首先在 Eclipse 的 Workspace 中建立一个名称为 test.emma 的新 Java 项目。下面,我们在其中建立一个 HelloWorld 类,其代码如下所示:

用于测试 EclEmma 的代码

代码: [ 复制到剪贴板 ]
package test.emma;

public class HelloWorld {
/**
* @param args
*/
public static void main(String[] args) {
int rand = (int) (Math.random()*100);
if(rand%2==0){
System.out.println( "Hello, world! 0");
}
else
System.out.println("Hello, world! 1");

int result = rand%2==0? rand+rand:rand*rand;
System.out.println(result);
}
}

接下来,我们通过 EclEmma 运行 HelloWorld.main() 函数。

对 Java 应用程序代码进行测试


执行完毕之后,我们正在编辑 HelloWorld.java 的窗口将会变成如下所示:
进行覆盖测试的结果:


在 Java 编辑器中,EclEmma 用不同的色彩标示了源代码的测试情况。其中,绿色的行表示该行代码被完整的执行,红色部分表示该行代码根本没有被执行,而黄色的行表明该行代码部分被执行。黄色的行通常出现在单行代码包含分支的情况,例如 上图 中的 16 行就显示为黄色。由于程序中有一个随机确定的分支,因此读者的窗口可能与这里稍有不同(11 行或者 14 行中有且只有一个红色的行)。

除了在源代码编辑窗口直接进行着色之外,EclEmma 还提供了一个单独的视图来统计程序的覆盖测试率。

察看程序的覆盖测试率:


EclEmma 提供的 Coverage 视图能够分层的显示代码的覆盖测试率, 上图中的信息表明我们对 HelloWorld 的一次运行覆盖了大约 68.6% 的代码。

想在一次运行中覆盖所有的代码通常比较困难,如果能把多次测试的覆盖数据综合起来进行察看,那么我们就能更方便的掌握多次测试的测试效果。EclEmma 提供了这样的功能。现在,让我们重复数次对 HelloWorld 的覆盖测试。我们注意到 Coverage 视图总是显示最新完成的一次覆盖测试。事实上,EclEmma 为我们保存了所有的测试结果。接下来,我们将通过 Coverage 视图的工具按钮来结合多次覆盖测试的结果。

用于结合多次覆盖测试结果的工具栏按钮:


当我们多次运行 Coverage 之后,我们可以单击上图所示工具栏按钮。之后,一个对话框将被弹出以供用户选择需要合并的覆盖测试。

选择需要合并的覆盖测试结果:


在合并完成之后,我们可以观察到 Java 编辑器和 Coverage 视图中都显示了合并之后的结果:

察看合并后的覆盖测试结果:


最后我们可以看到,通过多次运行覆盖测试,最终我们的代码达到了 91.4% 的测试覆盖率。有趣的是,上图中第三行代码被标记为红色,而此行代码实际上是不可执行的。奥妙在于,我们没有生成任何 HelloWorld 类的实例,因此缺省构造函数没有被调用,而 EclEmma 将这个特殊代码的覆盖状态标记在类声明的第一行。