代码覆盖测试-Code Coverage Testing with EclEmma-使用篇

上传人:公**** 文档编号:561706584 上传时间:2023-06-05 格式:DOCX 页数:8 大小:271.60KB
返回 下载 相关 举报
代码覆盖测试-Code Coverage Testing with EclEmma-使用篇_第1页
第1页 / 共8页
代码覆盖测试-Code Coverage Testing with EclEmma-使用篇_第2页
第2页 / 共8页
代码覆盖测试-Code Coverage Testing with EclEmma-使用篇_第3页
第3页 / 共8页
代码覆盖测试-Code Coverage Testing with EclEmma-使用篇_第4页
第4页 / 共8页
代码覆盖测试-Code Coverage Testing with EclEmma-使用篇_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《代码覆盖测试-Code Coverage Testing with EclEmma-使用篇》由会员分享,可在线阅读,更多相关《代码覆盖测试-Code Coverage Testing with EclEmma-使用篇(8页珍藏版)》请在金锄头文库上搜索。

1、代码覆盖测试-Code Coverage Tes ting with EclEmma-使用篇为了实验 EclEmma 的特性,我们首先在 Eclipse 的 Workspace 中建立一个名 称为 test.emma 的新 Java 项目。接下来,我们在其中建立一个 HelloWorld 类,其代码如下所示:package test.emma;lic class HelloWorld/* param args*/public static void main(String args) int rand = (int) (Math.random() * 100);if (rand % 2 = 0

2、)System.ou亡.println(Hello, world! 0); elseSystem.ou亡.println(Hello, world! 1);int result = rand % 2 = 0 ? rand + rand : rand * rand;System.out.println(result);接下来,我们通过EclEmma运行HelloWorld.main()函数。图3对Java应用程序进行覆盖测试rTj 1 HelloWorld 2 Eclipse Application 0 3 GEF tutorialIlloWorld.java 蘆 package test.-e

3、mma;Coverage As*V 1 Java Application瘫矗咎 Coverage.Organize Favorites.执行完毕之后,我们正在编辑 HelloWorld.java 的窗口将会变成如下所示:图4进行覆盖测试的结果在Java编辑器中,EclEmma用不同的色彩标示了源代码的测试情况。其中,绿 色的行表示该行代码被完整的执行,红色部分表示该行代码根本没有被执行,而 黄色的行表明该行代码部分被执行。黄色的行通常出现在单行代码包含分支的情 况,例如上图中的 16 行就显示为黄色。由于程序中有一个随机确定的分支,因 此读者的窗口可能与这里稍有不同( 11 行或者 14 行中

4、有且只有一个红色的 行)。除了在源代码编辑窗口直接进行着色之外,EclEmma还提供了一个单独的视图来 统计程序的覆盖测试率。图5察看程序的覆盖测试率EclEmma 提供的 Coverage 视图能够分层的显示代码的覆盖测试率,上图中的信 息表明我们对 HelloWorld 的一次运行覆盖了大约 68.6% 的代码。想在一次运行中覆盖所有的代码通常比较困难,如果能把多次测试的覆盖数据综 合起来进行察看,那么我们就能更方便的掌握多次测试的测试效果。EclEmma提 供了这样的功能。现在,让我们重复数次对 HelloWorld 的覆盖测试。我们注意 到 Coverage 视图总是显示最新完成的一次

5、覆盖测试。事实上, EclEmma 为我们 保存了所有的测试结果。接下来,我们将通过 Coverage 视图的工具按钮来结合 多次覆盖测试的结果。图 6用于结合多次覆盖测试结果的工具栏按钮Total Insti uctions35 二 J Relaunch Coverag已 Session |68.6 % 织f 豊 Coverage XConsde当我们多次运行 Coverage 之后,我们可以单击上图所示工具栏按钮。之后,一 个对话框将被弹出以供用户选择需要合并的覆盖测试。图7选择需要合并的覆盖测试结果在合并完成之后,我们可以观察到 Java 编辑器和 Coverage 视图中都显示了合 并

6、之后的结果:图8察看合并后的覆盖测试结果System. cu.prmtm(refiut);国 HelloWorld .java 凉=public class HelloWorld test.emmaa HelloWorld S main(Stringn)static void inftm(StringI args) int rand = (int) (Math, ran100);if(rand%.2=0)System.mzf.println(lfHello, xvorld- 0);L;广ProblemsJavadocDedarationSnippets iap Coverage 凉 Conso

7、leMerged (Mar 21,2007 9:47:37 AM)电 X 离醤盛叵由瞽匸ElementCoverage Covered InstructionsTotal Instru匚tions-:;test.emmB-.号 test.emmaE 田 test.emma-固 HelloWorld.java -連 HelloWorld 农 main(StringQ;=91.4 %3235口91.斗 %3235口91.4%3235二91.4%3235口91.4 %3235100.0 %3232从上图中,我们可以看到,通过多次运行覆盖测试,最终我们的代码达到了 91.4% 的测试覆盖率。有趣的是,

8、图中第三行代码被标记为红色,而此行代码实际上是 不可执行的。奥妙在于,我们没有生成任何 HelloWorld 类的实例,因此缺省构 造函数没有被调用,而 EclEmma 将这个特殊代码的覆盖状态标记在类声明的第 一行。EclEmma的高级特性如果 EclEmma 只能测试 Java Application 的测试覆盖率,那么它相对命令行 版本的Emma来说,提供的增强就不多了。相反,EclEmma提供了很多与Eclipse 紧密结合的功能。它不仅能测试Java Application,还能计算JUnit单元测试 对 Eclipse 插件测试的覆盖率。从下图中我们可以看到 EclEmma 目前支

9、持四种 类型的程序。图9 EclEmma的配置页面为了了解 EclEmma 是如何获得覆盖测试数据的,我们需要先对 Emma 有初步的了解。通常代码覆盖测试工具都需要对被执行的代码进行修改。而Emma提供了 两种方式来完成这件事。1. 预插入模式:对程序进行测量之前,需要采用Emma提供的工具对class文 件或者 jar 文件进行修改。修改完成之后的代码可以立刻被执行。覆盖测试的 结果将会被存放到指定的文件中。2. 即时插入模式:即时插入模式不需要事先对代码进行修改。相反,对代码的 修改是通过一个Emma定制的Class loader (类载入器)进行的。这种方式的 优点很明显,我们不需要对

10、class或者jar文件进行任何修改。缺点是我们为 了获得测试的结果,需要用Emma提供的命令emmarun来执行Java应用程序。 使用即时插入模式的优点很明显:class文件和jar文件不会被修改。而预插 入模式的应用范围更为广泛,对于某些需要嵌入到框架中运行的代码来说(例如 EJB),我们只能使用预插入模式。EclEmma仅仅使用了 Emma的预插入模式来 工作,不过EclEmma缺省会在临时目录中创建class文件和jar文件的副本 来进行修改,因此在 workspace 中 class 和 jar 文件仍然保持原样。虽然听 上去很好,但是由于需要修改classpath来使用修改过的c

11、lass和jar文件, 对于不能修改classpath的应用(例如Eclipse RCP和JUnit Plugin Test) 来说,我们还是只能选择修改workspace中的class文件和jar文件。对于 Java Application 和 JUnit 类型的覆盖测试,我们可以在配置对话框中选中“In-place instrumentation” 项来指定直接修改 Workspace 中的.class 文 件和 .jar 文件。结论本文通过一个简单的例子介绍了使用 EclEmma 进行覆盖测试的基本过程。 EclEmma 允许软件工程师/测试工程师方便的考察测试的覆盖率,并能将测试结 果以直观、简洁的方式展现给开发人员。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号