单元测试失败,Null Pointer Exceptions与clover 3.1.8但是所有都通过clover 4.0.2进行清理

时间:2014-12-24 08:14:29

标签: code-coverage clover unit-testing

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

  1. mvn clean install
  2. mvn -P instrumentation clover2:instrument
  3. 运行功能测试
  4. mvn -P instrumentation clover2:aggregate
  5. mvn -P instrumentation clover2:clover site
  6. 所有单元测试都通过了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。 .air.supply。 .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest 测试运行:4,失败:4,错误:0,跳过:0,经过的时间:0.27秒&lt;&lt;&lt;失败! com。 .air.supply。 .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testKnowledgeAgentInitialization()经过的时间:0.002秒&lt;&lt;&lt;失败! 显示java.lang.NullPointerException     at com。 .air.supply。。*。drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testKnowledgeAgentInitialization(ApplyQueryValueThrottleEngineUnitTest.java:145)

    com。 .air.supply。 .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testNoM hingRule()经过的时间:0.266秒&lt;&lt;&lt;失败! 显示java.lang.NullPointerException     at com。 .air.supply。 .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testNoM hingRule(ApplyQueryValueThrottleEngineUnitTest.java:124)

    com。 .air.supply。 .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testM hingRule()已用时间:0秒&lt;&lt;&lt;失败! 显示java.lang.NullPointerException     at com。 .air.supply。 .drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testM hingRule(ApplyQueryValueThrottleEngineUnitTest.java:135)

1 个答案:

答案 0 :(得分:0)

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

特别要确保您的构建工作区和〜/ .m2本地缓存都不包含由错误的Clover版本检测的JAR文件 - 这是以前版本的剩余部分。

运行&#39; mvn clean&#39;在你的工作区。删除全部&#39; * - clover.jar&#39;来自〜/ .m2的文件。如果您使用&#39; clover2:setup&#39;与Maven的安装&#39;目标,删除没有&#39; -clover&#39;的JAR文件名称中包含检测代码的后缀(如何识别JAR是否包含检测代码?它们的名称中包含* .class文件包含&#39; $ __ CLR&#39;。

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