EclEmma java.lang.NoClassDefFoundError: com/vladium/emma/rt/

1.在测试一个单元测试时,先用junit测试,能够通过。又想看一下覆盖率,就用EclEmma来再次运行,发现测试不能运行。网上一找 “ 对于 Java Application 和 JUnit 类型的覆盖测试,我们可以在配置对话框中选中“In-place instrumentation”项来指定直接修改 Workspace 中的 .class 文件和 .jar 文件。”

这样的信息。因为通常代码覆盖测试工具都需要对被执行的代码进行修改。那就在

再Open Coverage Dialog…

出现

选中“In-place instrumentation”, 再次点击,测试通过。

但又用junit测试时就出现了java.lang.NoClassDefFoundError: com/vladium/emma/rt/RT异常,这是怎么回事呢?

通过查看Emma的工作原理:

    预插入模式:对程序进行测量之前,需要采用 Emma 提供的工具对 class 文件或者 jar 文件进行修改。修改完成之后的代码可以立刻被执行。覆盖测试的结果将会被存放到指定的文件中。 即时插入模式:即时插入模式不需要事先对代码进行修改。相反,对代码的修改是通过一个 Emma 定制的 Classloader(类载入器)进行的。这种方式的优点很明显,我们不需要对 class 或者 jar文件进行任何修改。缺点是我们为了获得测试的结果,需要用 Emma 提供的命令 emmarun 来执行 Java 应用程序。

就知道解决方法了:

把测试相关的类重新编译,就可以通过junit的测试了。

参见:

使用 EclEmma 进行覆盖测试

http://www.ibm.com/developerworks/cn/java/j-lo-eclemma/index.html

年轻是我们唯一拥有权利去编织梦想的时光

EclEmma java.lang.NoClassDefFoundError: com/vladium/emma/rt/

相关文章:

你感兴趣的文章:

标签云: