0

我们的项目是一个多模块 maven 项目,使用 clover2:instrument 生成检测的 fat jar。我们使用命令行中的检测 jar 评估功能测试代码覆盖率,所有步骤如下:

  1. mvn 干净安装
  2. mvn -P 仪器 clover2:仪器
  3. 运行功能测试
  4. mvn -P 仪器 clover2:aggregate
  5. mvn -P 仪器 clover2:clover 站点

所有单元测试都通过 clover 4.0.2 通过,但是当使用 clover 版本 3.1.8 时,它们因 NPE 而失败。我们想使用旧版本,因为我们有它的商业许可,而不是新版本。请帮忙。

我无法共享日志,因为这可能会违反我的组织政策。分享摘录

Tests run: 6, Failures: 6, Errors: 0, Skipped: 0, Time elapsed: 0 sec <<< FAILURE!
com.***.*.*.*.*.drools.*.*************UnitTest.testKnowledgeAgentInitialization() Time elapsed: 0 sec <<< FAILURE!
java.lang.NullPointerException
at com.***.*.*.*.*.drools.*.*************UnitTest.testKnowledgeAgentInitialization(*************UnitTest.java:149)

Parent POM for clover:
<profiles>
    <profile>
        <id>instrumentation</id>
        <activation>
            <property>
                <name>instrumentation</name>
            </property>
        </activation>
        <dependencies>
        <dependency>
                <groupId>com.atlassian.clover</groupId>
                <artifactId>clover</artifactId>
                <version>${version.clover}</version>
            </dependency>
        </dependencies>
        <build>
        <plugins>
            <plugin>
                <groupId>com.atlassian.maven.plugins</groupId>
                <artifactId>maven-clover2-plugin</artifactId>
                <version>${version.clover}</version>
                <configuration>
                    <license>${clover.license}</license>
                    <includesTestSourceRoots>false</includesTestSourceRoots>
                </configuration>
             <executions>
                    <execution>
                        <id>site</id>
                        <phase>pre-site</phase>
                        <goals>
                            <goal>aggregate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        </build>
    </profile>

We are using Surefire to run Unit tests
    <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.14.1</version>
                <configuration>
                   <includes>
                        <include>**/*UnitTest.java</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <phase>test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <testNGArtifactName>none:none</testNGArtifactName>
                            <reportsDirectory>${project.build.directory}/surefire-reports/testng</reportsDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>test-testng</id>
                        <phase>test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <junitArtifactName>none:none</junitArtifactName>
                            <reportsDirectory>${project.build.directory}/surefire-reports/junit</reportsDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

从日志中添加额外的堆栈虽然它并没有真正提供太多信息

运行 com。。气源。. .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest 测试运行:4,失败:4,错误:0,跳过:0,经过时间:0.27 秒 <<< 失败!com。。气源。. .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testKnowledgeAgentInitialization() 已用时间:0.002 秒 <<< 失败!com 上的 java.lang.NullPointerException。。气源。.*.drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testKnowledgeAgentInitialization(ApplyQueryValueThrottleEngineUnitTest.java:145)

com。。气源。. .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testNoM hingRule() 已用时间:0.266 秒 <<< 失败!com 上的 java.lang.NullPointerException。。气源。. .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testNoM hinRule(ApplyQueryValueThrottleEngineUnitTest.java:124)

com。。气源。. .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testM hingRule() 已用时间:0 秒 <<< 失败!com 上的 java.lang.NullPointerException。。气源。. .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testM hinRule(ApplyQueryValueThrottleEngineUnitTest.java:135)

4

1 回答 1

0

正如 Clover 的 4.0 发行说明中所述,Clover 4.x 与 Clover 3.x 二进制不兼容。因此,您必须确保不使用 Clover 3.x 检测代码,同时在运行时提供 Clover 4.x JAR(反之亦然)。

特别是,确保您的构建工作区和 ~/.m2 本地缓存都不包含由错误 Clover 版本检测的 JAR 文件 - 以前构建的遗留物。

在您的工作区中运行“mvn clean”。从 ~/.m2 中删除所有“*-clover.jar”文件。如果您将“clover2:setup”与 Maven 的“安装”目标一起使用,请同时删除名称中没有“-clover”后缀且包含检测代码的 JAR 文件(如何识别 JAR 是否包含检测代码?它将具有 *.名称中包含“$__CLR”的类文件)。

另见: https ://confluence.atlassian.com/display/CLOVER/Clover+4.0+Release+Notes

于 2015-01-21T11:57:50.483 回答