【问题标题】:Karate: Why NullPointerException at FileUtils happens for mvn clean-integration-test?空手道:为什么 FileUtils 的 NullPointerException 发生在 mvn clean-integration-test 上?
【发布时间】:2018-08-01 23:17:20
【问题描述】:

当我们使用 cmd-mvn integration-test 时,我们的集成测试空手道脚本按预期工作。如果我们使用 clean 它会失败并出现以下错误,并且成功执行的测试不会再次执行。

下面给出的错误日志,当我们使用 cmd - mvn clean integration-test

[INFO] --- maven-failsafe-plugin:2.13:integration-test (default) @ formfill ---
[INFO] Failsafe report directory: D:\Baskaran\wvid-stash\formfill\target\failsafe-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.dnb.vici.formfill.it.FormFill_ITSuite
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.27 sec <<< FAILURE!
initializationError(com.dnb.vici.formfill.it.FormFill_ITSuite)  Time elapsed: 0.008 sec  <<< ERROR!
java.lang.NullPointerException: null
        at com.intuit.karate.FileUtils.resolveIfClassPath(FileUtils.java:157)
        at com.intuit.karate.cucumber.KarateFeature.<init>(KarateFeature.java:47)
        at com.intuit.karate.cucumber.KarateFeature.loadFeatures(KarateFeature.java:62)
        at com.intuit.karate.junit4.Karate.<init>(Karate.java:53)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
        at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
        at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
        at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
        at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
        at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:262)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:208)
        at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:158)
        at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:86)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:95)

我们在 POM 中的配置如下供参考。

    <!-- Following plugin executes the unit tests -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.14.1</version><!--$NO-MVN-MAN-VER$ -->                
    </plugin>

    <!-- Following plugin executes the integration tests -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.13</version><!--$NO-MVN-MAN-VER$ -->
        <configuration>
            <includes>
                <include>**/FormFill_ITSuite.java</include>
            </includes>
            <testFailureIgnore>true</testFailureIgnore>                    
        </configuration>
        <executions>
            <execution>
                <id>integration-test</id>
                <goals>
                    <goal>integration-test</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

【问题讨论】:

  • 您是否查看了 FileUtils 的来源,第 157 行?看起来没有加载的资源有问题?也许你应该附加一个调试器?
  • 谢谢@Keulej。我看了看,除了 logback 配置之外,我没有从资源文件夹中加载任何内容。每当项目再次导入并运行 mvn integration-test 时,它都会按预期工作。仅当我执行 mvn clean integration-test 时才出现问题。
  • @BaskaranK 这是哪个版本的空手道。很抱歉,这些信息不足以复制。我注意到您在 Windows 上,这可能是一个错误。尽量不使用集成测试 maven 生命周期,并坚持使用 JUnit 的空手道示例。否则,如果您希望我们解决此问题,您需要提交带有工作示例的问题。
  • @PeterThomas,感谢您的快速回复 :) 我尝试使用空手道作为仅使用 junit runner 的 Spring boot 应用程序的集成测试。我们使用junit进行了单元测试。我们的目的是在每次构建之后依次执行单元测试和集成测试。我将尝试尽快分享工作示例以复制相同的内容。

标签: karate


【解决方案1】:

我在使用 JDK 1.7.0_75 编译测试时遇到了同样的 NullPointerException。改为使用 1.8.0_72 即可。

您说您的测试以前有效,但在使用“mvn clean”时它们停止工作。不幸的是,你没有告诉我们你是如何让他们工作的。但是 'mvn clean' 会删除现有的工件,如果它们随后使用旧 JDK 再次编译,则会发生 NullPointerException。

【讨论】:

    猜你喜欢
    • 2016-07-27
    • 2021-05-17
    • 2013-05-12
    • 2016-11-11
    • 2018-10-08
    • 2021-06-25
    • 2014-03-30
    • 2022-01-17
    相关资源
    最近更新 更多