我们是一个多模块maven项目,并使用clover2:仪器生成仪器化的胖罐。我们使用命令行中的检测jar来评估功能测试代码覆盖率,所有步骤如下:
所有单元测试都通过了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)
答案 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