[img][/img]安装 EclEmma 插件
安装 EclEmma 插件的过程和大部分 Eclipse 插件相同,我们既可以通过 Eclipse 标准的 Update 机制来远程安装 EclEmma 插件(图 1),也可以从站点(参阅参考资源)下载 zip 文件并解压到 eclipse 所在的目录中。
EclEmma - http://update.eclemma.org
图 1 添加 EclEmma 更新站点
不管采用何种方式来安装 EclEmma,安装完成并重新启动 Eclipse 之后,工具栏上应该出现一个新的按钮:
图 2 新增的覆盖测试按钮
使用 EclEmma 测试 Java 程序
为了实验 EclEmma 的特性,我们首先在 Eclipse 的 Workspace 中建立一个名称为 test.emma 的新 Java 项目。接下来,我们在其中建立一个 HelloWorld 类,其代码如下所示:
清单 1 用于测试 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() 函数。
图 3 对 Java 应用程序进行覆盖测试
执行完毕之后,我们正在编辑 HelloWorld.java 的窗口将会变成如下所示:
图 4 进行覆盖测试的结果
在 Java 编辑器中,EclEmma 用不同的色彩标示了源代码的测试情况。其中,绿色的行表示该行代码被完整的执行,红色部分表示该行代码根本没有被执行,而黄色的行表明该行代码部分被执行。黄色的行通常出现在单行代码包含分支的情况,例如图 4 中的 16 行就显示为黄色。由于程序中有一个随机确定的分支,因此读者的窗口可能与这里稍有不同(11 行或者 14 行中有且只有一个红色的行)。
除了在源代码编辑窗口直接进行着色之外,EclEmma 还提供了一个单独的视图来统计程序的覆盖测试率。
图 5 察看程序的覆盖测试率
EclEmma 提供的 Coverage 视图能够分层的显示代码的覆盖测试率,图 5 中的信息表明我们对 HelloWorld 的一次运行覆盖了大约 68.6% 的代码。
想在一次运行中覆盖所有的代码通常比较困难,如果能把多次测试的覆盖数据综合起来进行察看,那么我们就能更方便的掌握多次测试的测试效果。 EclEmma 提供了这样的功能。现在,让我们重复数次对 HelloWorld 的覆盖测试。我们注意到 Coverage 视图总是显示最新完成的一次覆盖测试。事实上,EclEmma 为我们保存了所有的测试结果。接下来,我们将通过 Coverage 视图的工具按钮来结合多次覆盖测试的结果。
图 6 用于结合多次覆盖测试结果的工具栏按钮
当我们多次运行 Coverage 之后,我们可以单击 图 6 所示工具栏按钮。之后,一个对话框将被弹出以供用户选择需要合并的覆盖测试。
图 7 选择需要合并的覆盖测试结果
在合并完成之后,我们可以观察到 Java 编辑器和 Coverage 视图中都显示了合并之后的结果:
图 8 察看合并后的覆盖测试结果
图 8 中,我们可以看到,通过多次运行覆盖测试,最终我们的代码达到了 91.4% 的测试覆盖率。有趣的是,图中第三行代码被标记为红色,而此行代码实际上是不可执行的。奥妙在于,我们没有生成任何 HelloWorld 类的实例,因此缺省构造函数没有被调用,而 EclEmma 将这个特殊代码的覆盖状态标记在类声明的第一行。
EclEmma 的高级特性
如果 EclEmma 只能测试 Java Application 的测试覆盖率,那么它相对命令行版本的 Emma 来说,提供的增强就不多了。相反,EclEmma 提供了很多与 Eclipse 紧密结合的功能。它不仅能测试 Java Application,还能计算 JUnit 单元测试,对 Eclipse 插件测试的覆盖率。从图 9 中我们可以看到 EclEmma 目前支持四种类型的程序。
图 9 EclEmma 的配置页面
为了了解 EclEmma 是如何获得覆盖测试数据的,我们需要先对 Emma 有初步的了解。通常代码覆盖测试工具都需要对被执行的代码进行修改。而 Emma 提供了两种方式来完成这件事。
1.预插入模式:对程序进行测量之前,需要采用 Emma 提供的工具对 class 文件或者 jar 文件进行修改。修改完成之后的代码可以立刻被执行。覆盖测试的结果将会被存放到指定的文件中。
2.即时插入模式:即时插入模式不需要事先对代码进行修改。相反,对代码的修改是通过一个 Emma 定制的 Class loader(类载入器)进行的。这种方式的优点很明显,我们不需要对 class 或者 jar 文件进行任何修改。缺点是我们为了获得测试的结果,需要用 Emma 提供的命令 emmarun 来执行 Java 应用程序。
使用即时插入模式的优点很明显:class 文件和 jar 文件不会被修改。而预插入模式的应用范围更为广泛,对于某些需要嵌入到框架中运行的代码来说(例如 EJB),我们只能使用预插入模式。EclEmma 仅仅使用了 Emma 的预插入模式来工作,不过 EclEmma 缺省会在临时目录中创建 class 文件和 jar 文件的副本来进行修改,因此在 workspace 中 class 和 jar 文件仍然保持原样。虽然听上去很好,但是由于需要修改 classpath 来使用修改过的 class 和 jar 文件,对于不能修改 classpath 的应用(例如 Eclipse RCP 和 JUnit Plugin Test)来说,我们还是只能选择修改 workspace 中的 class 文件和 jar 文件。对于 Java Application 和 JUnit 类型的覆盖测试,我们可以在配置对话框中选中“In-place instrumentation”项来指定直接修改 Workspace 中的 .class 文件和 .jar 文件。
结论
本文通过一个简单的例子介绍了使用 EclEmma 进行覆盖测试的基本过程。EclEmma 允许软件工程师方便的考察测试的覆盖率,并能将测试结果以直观、简洁的方式展现给开发人员。
分享到:
相关推荐
通过本文的介绍,我们了解到EclEmma不仅是一个强大的代码覆盖率工具,而且与Eclipse集成得非常好,极大地提高了开发效率。无论是对于初学者还是经验丰富的开发人员而言,EclEmma都是一个值得推荐的工具,它能帮助...
本课件将详细介绍EclEmma的原理、使用方法以及相关特性。 **测试覆盖率**是衡量测试代码对被测功能代码覆盖程度的指标,它有助于识别未被测试到的代码区域,从而提高整体开发效率和软件质量。EclEmma采用了**Class ...
安装完成后,EclEmma会在Eclipse的工具栏上添加Coverage按钮,方便用户快速启动覆盖率分析。 在实际应用中,例如一个名为"Random"的项目,包含被测代码和对应的JUnit测试类。通过运行测试类,如"RandomTest1"和...
2. **artifacts.jar**:这个文件可能包含了EclEmma的依赖库和其他构建产物,这些库使得EclEmma能与其他系统和服务协同工作。 3. **features**目录:通常包含Eclipse插件的特性描述文件,这些文件定义了插件的功能和...
在实际使用中, Eclemma 可以与其他持续集成工具(如Jenkins)结合,实现自动化测试覆盖率报告,这对于大型项目尤其重要,可以有效地监控代码质量并确保每次代码变更都不会引入新的问题。 总之,Eclemma-1.4.3.zip...
在使用EclEmma时,确保正确安装和配置插件,然后在Eclipse的运行配置中启用覆盖率选项。在运行测试后,EclEmma会自动收集覆盖率数据,并在工作区中显示。开发者可以通过查看覆盖率视图,深入了解项目的测试覆盖率...
安装与使用EclEmma 3.0.1** 为了在Eclipse环境中使用EclEmma,你需要按照以下步骤操作: 1. **下载**:首先从官方网站或者第三方平台获取EclEmma的最新版本,如3.0.1。 2. **安装**:将下载的EclEmma插件解压,...
下面将详细介绍 Eclemma 工具及其核心功能,以及与压缩包中的文件相关的知识点。 1. **Eclemma 简介** Eclemma 是基于 JUnit 的代码覆盖率工具,它通过分析运行时的信息来确定代码被测试覆盖的程度。这对于持续...
1. **安装插件**:在Eclipse IDE中通过“Help” -> “Eclipse Marketplace”搜索并安装EclEmma。 2. **配置项目**:选择要进行测试的Java项目,并启用EclEmma的覆盖率分析。 3. **编写单元测试**:使用JUnit或...
- **安装**:用户可以通过Eclipse的Marketplace来安装EclEmma插件,只需搜索"EclEmma"并按照提示进行操作即可。 - **运行测试**:在Eclipse中运行JUnit测试后,EclEmma会自动计算覆盖率,并在源代码中显示结果。 ...
### 代码覆盖率工具EclEmma使用手册知识点梳理 #### 一、引言 代码覆盖率作为衡量测试质量和软件可靠性的重要指标之一,在软件开发生命周期中扮演着至关重要的角色。EclEmma是一款优秀的Eclipse插件,它能够帮助...
eclemma是专为Eclipse打造的一款使用方便的Java代码覆盖工具,基于EMMA,eclemma可让你在Eclipse工作平台中使用强大的Java代码覆盖工具EMMA,用于实际项目开发,覆盖率能保证代码的逻辑正确率,使用这个review代码都...
通过使用Eclemma,开发者可以更有效地确保他们的测试覆盖了所有关键路径,从而提高软件的可靠性和稳定性。 Eclemma的主要特点包括: 1. **集成开发环境(IDE)支持**: Eclemma与Eclipse IDE紧密集成,使得用户在...
EclEmma 是一个基于EMMA的...EclEmma是非 侵入式的不需要修改你的项目或执行其它任何安装,它能够在工作平台中启动像运行JUnit测试一样直接对代码覆盖进行分析。覆盖结果将立即被汇总并在 Java源代码编辑器中高亮显示。
eclemma是一款基于EMMA的Java代码覆盖工具,可让你在Eclipse工作平台中使用强大的Java代码覆盖工具EMMA。本版本为官网下载的最新版本的eclemma,用于实际项目开发,覆盖率能保证代码的逻辑正确率,使用这个review...
EclEmma是一个基于EMMA的...EclEmma是非侵入式的不需要修改你的项目或执行其它任何安装,它能够在工作平台中启动像运行JUnit测试一样直接对代码覆盖进行分析。覆盖结果将立即被汇总并在Java源代码编辑器中高亮显示。
EclEmma是一款广泛使用的Java代码覆盖率工具,它帮助开发者测量和显示单元测试的覆盖范围。2.0.1是该工具的一个特定版本号,这可能意味着它是该软件的一个稳定版本,具有一定的更新和改进。 描述中同样提到"eclemma...
EclEmma是一款广泛使用的Java单元测试覆盖率工具,它与JUnit紧密集成,使得开发者能够方便地度量和分析他们的代码在单元测试中的覆盖情况。 在描述中提到,“代码单元测试覆盖率,配合junit使用,非常好用。” 这...