一。
Cobertura
是一种开源工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率。除了找出未测试到的代码并发现 bug 外,Cobertura 还可以通过标记无用的、执行不到的代码来优化代码,还可以提供 API 实际操作的内部信息。Elliotte Rusty Harold 将与您分享如何利用代码覆盖率的最佳实践来使用 Cobertura。
Cobertura的对应Eclipse 插件coverlipse: http://coverlipse.sf.net/update
不过略有不足的事:不支持junit4的测试方法,如果想用coverlipse的话,这只能把测试类转化成junit3的方式了。不过你用junit4写的类如果方法命名比较规范的话,转化还是很方便的。
二。
测试覆盖率是商业的clover
三。
EclEmma
Emma 的作者开发 Emma 之初,程序员已经有了各种各样优秀的开源 Java 开发工具。EclEmma 的出现弥补了 Emma 用户一个大的遗憾 ---- 缺乏图形界面以及对集成开发环境的支持。将 Eclipse 和 Emma 这两个在各自领域最为优秀的工具结合起来,这就是 EclEmma 为我们提供的。
本人推荐EclEmma 开源且功能强大,支持junit4
注意点:
对于一些不可加过密的jar. 请勾上“In-place instrumentation”项,要不然可能会出错用junit测试能通过。但
用EclEmma测试时,则能不过的情况。
为了了解 EclEmma 是如何获得覆盖测试数据的,我们需要先对 Emma 有初步的了解。通常代码覆盖测试工具都需要对被执行的代码进行修改。而 Emma 提供了两种方式来完成这件事。
- 预插入模式:对程序进行测量之前,需要采用 Emma 提供的工具对 class 文件或者 jar 文件进行修改。修改完成之后的代码可以立刻被执行。覆盖测试的结果将会被存放到指定的文件中。
- 即时插入模式:即 时插入模式不需要事先对代码进行修改。相反,对代码的修改是通过一个 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 文件。
参见:
1.用 Cobertura 测量测试覆盖率
http://www.ibm.com/developerworks/cn/java/j-cobertura/
2.clover
http://sunnylocus.javaeye.com/blog/299781
3.EclEmma
http://www.eclemma.org/index.html
http://www.ibm.com/developerworks/cn/java/j-lo-eclemma/