【发布时间】:2013-02-04 17:23:34
【问题描述】:
我想在我的 Web 应用程序中使用 Cobertura 代码覆盖率记录,但无法让它工作。我怀疑,问题是 Spring 或 Hibernate 和 Cobertura 之间存在一些冲突,因为这三个都使用 ASM 库来进行字节码操作。
我做了以下事情:
- 我使用 Cobertura Ant 任务在“WEB-INF/lib”中检测我的 jar,并生成了“cobertura.ser”文件
- 我将“cobertura.jar”添加到“WEB-INF/lib”中
- 我启动 tomcat 提供 cobertura 文件位置 (net.sourceforge.cobertura.datafile=cobertura.ser)
当我启动 Tomcat 时,在初始化 Spring 上下文时收到以下错误消息:
java.lang.NoSuchMethodException: com.foo.MyClass.setInstance($Proxy28)
at com.foo.common.runtime.spring.PluginInjector.findBestMatchingMethod(PluginInjector.java:252)
at com.foo.common.runtime.spring.PluginInjector.invokeMethod(PluginInjector.java:198)
at com.foo.common.runtime.spring.PluginInjector.afterPropertiesSet(PluginInjector.java:174)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
我已经知道,cobertura 附带的 asm.jar 不应该在类路径中,因此我只将 cobertura.jar 复制到 WEB-INF\lib。
此外,我还尝试了 Emma,它确实有效。但是,cobertura 看起来更现代、更活跃(最后一次更新是 2010 年而不是 2005 年)并且生成的报告更好,所以我更喜欢它而不是 Emma。
【问题讨论】:
标签: spring hibernate tomcat cobertura java-bytecode-asm