通过 Maven 的单元测试,但在 Cobertura 中失败:“期望在分支目标 65 处出现堆栈映射帧”

我最近将Cobertura插件添加到我的Java / Spring-MVC项目中。奇怪的是,我所有的单元测试都通过了,当Maven进行初始测试运行时,它们仍然通过,但是当Cobertura尝试运行测试时,它们都失败了,并显示相同的错误消息:

Expecting a stackmap frame at branch target 65 in method xxx.xxxx.xxxx.xxxx;)V at offset 40

我不知道为什么会发生这种情况,甚至不知道如何去修复它。我搜索了互联网,但没有发现任何类似的问题。我使用JUnit和spring-test-mvc进行测试。

以前有人见过这个吗?


答案 1

当然,我在提出问题后立即找到了答案,尽管我之前搜索了很长一段时间......

问题在于 Cobertura 在 Java 1.7 上使用时遇到了麻烦。您必须将以下行添加到 pom.xml:

<argLine>-XX:-UseSplitVerifier</argLine>

这涉及到配置元素中。以下是整个Cobertura部分:

     <plugin>
        <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <argLine>-XX:-UseSplitVerifier</argLine>
                <formats>
                    <format>xml</format>
                </formats>
            </configuration>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>cobertura</goal>
                    </goals>
                </execution>
            </executions>
       </plugin>

现在一切按预期工作。


答案 2

使用新插件修复

                  <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>cobertura-maven-plugin</artifactId>
                        <version>2.7</version>
                        <configuration>
                            <formats>
                                <format>xml</format>
                            </formats>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>cobertura</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

推荐