Jag*_*ger 55 code-coverage emma cobertura java-7 jacoco
我已经切换到最新的JDK 7,我遇到了在emma覆盖工具打乱的字节代码上运行testng单元测试的问题.我的测试用例都没有正确运行,对于大多数测试用例我都收到了这样的错误.
java.lang.ClassFormatError: Illegal local variable table length 10 in method measurement.meter.AbstractSerialPortMeter.<init>(Lmeasurement/meter/SerialPort;)V at measurement.meter.Elc3133aTest.setUp(Elc3133aTest.java:42)
Run Code Online (Sandbox Code Playgroud)
我在这里找到了一篇文章JSR 292 Goodness Fast Code Coverage Tool Less 10k,它说"JSR 292引入了一个新的字节码指令invokedynamic,但也有几种新的常量池常量.这意味着大多数解析字节码的工具都像ASM,BCEL,findbugs或EMMA需要更新为兼容java 7."
检查了艾玛的主页,但看起来它已经很久没有更新了.
有人解决了类似的问题吗?
我也曾尝试过Cobertura.它看起来工作得更好但我得到了很多类型的例外VerifyError
.
java.lang.VerifyError: Expecting a stackmap frame at branch target 85 in method measurement.meter.AbstractSerialPortMeter.close()V at offset 26
at measurement.meter.AbstractSerialPortMeterTest.setUp(AbstractSerialPortMeterTest.java:27)
Run Code Online (Sandbox Code Playgroud)
Ped*_*ros 76
我使用maven cobertura插件时遇到了同样的问题.从cobertura运行时,所有测试都失败了:报告.但是直接从surefire插件运行所有测试都成功了.正如你们中的一些人已经说过的问题是,coberture字节码检测与JDK7不兼容.
你可以在这里看到http://vikashazrati.wordpress.com/2011/10/09/quicktip-verifyerror-with-jdk-7/说:"与StackMapTable属性的新类型检查"的异常有关(参见:-X :http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html中的+ UseSplitVerifier JVM选项.
所以我的解决方案是配置surefire-plugin以始终使用JVM arg"-XX:-UseSplitVerifier执行测试.无论使用和不使用cobertura工具,它都可以正常工作.
我在maven中的万无一失的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<argLine>-XX:-UseSplitVerifier</argLine>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我遇到过同样的问题.幸运的是beta可与JDK 7一起使用.
更新站点链接:http
://download.eclipselab.org/eclemma/beta/2.0.0/update/
此链接应在Eclipse中使用:
Help -> Install new software... -> Add...
Run Code Online (Sandbox Code Playgroud)
休息应该很容易;)