当前位置: 首页 > 知识库问答 >
问题:

单元测试失败与空指针异常与三叶草3.1.8但是都通过与三叶草4.0.2干净

梁丘佑运
2023-03-14

我们的是一个多模块maven项目,使用Clover2: Instr生成仪表化脂肪罐。我们使用命令行中的仪表化jar评估功能测试代码覆盖率,所有步骤如下所述:

  1. mvn 全新安装
  2. mvn -P 仪器三叶草 2:仪器
  3. 运行功能测试
  4. mvn -P instrumentation clover2:aggregate
  5. mvn -P仪器三叶草2:三叶草网站

所有单元测试都通过了三叶草4.0.2,但是当使用三叶草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秒

com.air.supply....drools.ruleengine.ApplyQueryValueThrottleEngineUnitTest.testNoMhingRule()经过时间:0.266秒

com..空气供应...drools . rule engine . applyqueryvaluethrottleengineunitest . testmhingrule()所用时间:0秒

共有1个答案

李新霁
2023-03-14

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

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

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

请参阅:https://confluence.atlassian.com/display/CLOVER/Clover4.0版本说明

 类似资料:
  • 我们新建立了一个哈德逊(是的...哈德逊,不是Jenkins)CI。哈德逊的工作安排如下 a.连接到IBMClearCase存储库以下载最新的源代码 b.编译所有java源代码并创建一个WAR文件(通过运行项目的pom.xml) c.将其部署到Tomcat6服务器 现在,我想更进一步——在这个过程中引入自动“静态代码分析器”。< br > 我在Hudson实例中安装了PMD/Clover/Java

  • 我一整天都在研究这个问题,还没有找到解决方案,所以我想求助于stackoverflow社区。 我有一个Jenkins的服务器设置(版本1.454)。它被配置为使用Maven(版本3.0.4)执行构建。构建命令如下: Jenkins安装并配置了声纳插件。我的声纳安装(版本3)与jenkins在不同的服务器上。构建完成后,我可以在声纳上看到结果(构建的基础知识)。 我已将clover插件(sonar-

  • 问题内容: 有人可以解释一下为什么在第一种情况下检测到空指针,而在另一种情况下却没有吗? 也许他总是看第一种类型,但是为什么他只在条件为假的情况下才这样做。 问题答案: 当您使用三元运算符时, 转换时,类型1和类型2必须具有相同的类型。首先,它实现了type1,然后实现了type2。 现在看看你的情况 因为is 并且它将作为原始,并且因为正试图将其转换为。因此为空指针。 在哪里一样棘手的测试5 由

  • 我有一个主页。我正在尝试使用测试注释测试TestNG中的页面标题。我得到了testTitle()的NullPointerException。url正在打开。

  • 我正在使用CSV reader从获取数据,并在使用DataProvider的测试函数中使用该数据。

  • 在unittest中,我可以在一个类中设置变量,然后这个类的方法可以选择它想要使用的任何变量... 所以在unittest中,很容易将一组测试放在一起,这些测试可以放在一个类下,然后为不同的方法使用许多不同的变量(varA和varB)。在pytest中,我在conftest.py中创建了一个fixture,而不是在unittest中创建了一个类,如下所示。。。 对于两个不同的函数,我在不同的文件中