简体   繁体   English

运行 Junit 测试时出现错误 NoClassDefFoundError

[英]Error NoClassDefFoundError while running Junit test

When I run this script to automate:当我运行此脚本以自动化时:

 package testRunners; import org.junit.runner.RunWith; import io.cucumber.junit.Cucumber; import io.cucumber.junit.CucumberOptions; @RunWith(Cucumber.class) @CucumberOptions(features="resources/features", glue="") public class TestRunner_GoogleHomepage { }

I use:我用:

  • cucumber-core-5.7.0.jar黄瓜芯5.7.0.jar
  • cucumber-java-5.7.0.jar黄瓜-java-5.7.0.jar
  • cucumber-junit-5.7.0.jar黄瓜-junit-5.7.0.jar
  • cucumber-jvm-deps-1.0.6.jar黄瓜-jvm-deps-1.0.6.jar
  • gherkin-8.2.1.jar小黄瓜8.2.1.jar
  • junit-4.12.jar junit-4.12.jar
  • mockito-all-1.10.19.jar mockito-all-1.10.19.jar

I obtain this error result in Java track trace console:我在 Java 跟踪控制台中获得此错误结果:

java.lang.NoClassDefFoundError: io/cucumber/plugin/event/EventPublisher
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.getConstructor(Unknown Source)
    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.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:90)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:76)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:49)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:526)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Caused by: java.lang.ClassNotFoundException: io.cucumber.plugin.event.EventPublisher
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 29 morec

I use:我用:

 cucumber-core-5.7.0.jar cucumber-java-5.7.0.jar cucumber-junit-5.7.0.jar cucumber-jvm-deps-1.0.6.jar gherkin-8.2.1.jar junit-4.12.jar

It would appear that you are manually downloading jar files.您似乎正在手动下载 jar 文件。 This is not a practice I would recommend.这不是我推荐的做法。 If you follow the 10 minute tutorial you'll get an introduction that uses Maven dependency management.如果您按照10 分钟的教程进行操作,您将获得使用 Maven 依赖管理的介绍。

In addition to this tutorial I would strongly urge you to invest time in learning either Maven or Gradle along with Cucumber.除了本教程之外,我强烈建议您花时间学习 Maven 或 Gradle 以及 Cucumber。 Amongst other things these tools will automate your dependency management and this can make your life much easier.除其他外,这些工具将自动化您的依赖管理,这可以让您的生活更轻松。

For example:例如:

If you want to use Cucumber with JUnit 4 and annotation based step definitions you would declare this minimal set of dependencies in a Maven pom.xml file. If you want to use Cucumber with JUnit 4 and annotation based step definitions you would declare this minimal set of dependencies in a Maven pom.xml file.

    <properties>
        <cucumber.version>5.7.0</cucumber.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

By telling Maven what your dependencies are Maven can calculate your transitive dependencies ie: the dependencies of your dependencies.通过告诉 Maven 你的依赖是什么 Maven 可以计算你的传递依赖,即:你的依赖的依赖。

This has many advantages.这有很多优点。 One example would be using the mvn dependency:tree command to list all dependencies.一个示例是使用mvn dependency:tree命令列出所有依赖项。 This is much faster and much less error prone then downloading jar files by hand and hoping that you have the right ones.这比手动下载 jar 文件并希望您拥有正确的文件要快得多且不易出错。

$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------< cucumber:cucumber-java-skeleton >-------------------
[INFO] Building Cucumber-Java Skeleton 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ cucumber-java-skeleton ---
[INFO] cucumber:cucumber-java-skeleton:jar:0.0.1
[INFO] +- io.cucumber:cucumber-java:jar:5.7.0:test
[INFO] |  +- io.cucumber:cucumber-core:jar:5.7.0:test
[INFO] |  |  +- io.cucumber:cucumber-gherkin:jar:5.7.0:test
[INFO] |  |  +- io.cucumber:cucumber-gherkin-vintage:jar:5.7.0:test
[INFO] |  |  +- io.cucumber:tag-expressions:jar:2.0.4:test
[INFO] |  |  +- io.cucumber:cucumber-expressions:jar:8.3.1:test
[INFO] |  |  +- io.cucumber:datatable:jar:3.3.0:test
[INFO] |  |  +- io.cucumber:cucumber-plugin:jar:5.7.0:test
[INFO] |  |  \- io.cucumber:docstring:jar:5.7.0:test
[INFO] |  \- org.apiguardian:apiguardian-api:jar:1.1.0:test
[INFO] +- io.cucumber:cucumber-junit:jar:5.7.0:test
[INFO] \- junit:junit:jar:4.13:test
[INFO]    \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.781 s
[INFO] Finished at: 2020-02-10T23:00:14+01:00
[INFO] ------------------------------------------------------------------------

I believe that below dependency is missing.我相信缺少以下依赖项。 Could you please add the below dependency in your project.您能否在您的项目中添加以下依赖项。 Version must be same as the other cucumber dependencies.版本必须与其他 cucumber 依赖项相同。

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-plugin</artifactId>
    <version>5.7.0</version>
</dependency>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在Netbeans中运行JUnit测试时的java.lang.NoClassDefFoundError - java.lang.NoClassDefFoundError while running JUnit test in Netbeans 运行Junit时出错-java.lang.NoClassDefFoundError:gherkin / IGherkinDialectProvider - Error while running Junit - java.lang.NoClassDefFoundError: gherkin/IGherkinDialectProvider Spring和JPA:运行JUnit测试时出错 - Spring and JPA: error while running JUnit test java.lang.NoClassDefFoundError 异常:使用 JUnit 运行 cucumber 测试时出现 gherkin/util/FixJava - java.lang.NoClassDefFoundError exception: gherkin/util/FixJava while running cucumber test using JUnit Robolectric PowerMock运行测试时出现java.lang.NoClassDefFoundError错误 - Robolectric PowerMock java.lang.NoClassDefFoundError error while running a test 在Eclipse中运行JUnit测试用例时没有套接字可用错误 - No socket available error while running JUnit test case in eclipse 空手道 - 以 Junit 身份运行测试运行程序时出现 NoClassDefFoundError - Karate- Getting NoClassDefFoundError when running the Test Runner as Junit 运行junit测试方法以与JAX-RS服务进行交互-NoClassDefFoundError - running a junit test method to interact with a JAX-RS Service - NoClassDefFoundError 运行JUnit插件测试时的java.lang.NoClassDefFoundError - java.lang.NoClassDefFoundError when running JUnit plug-in test 运行机器人单元测试时出现 NoClassDefFoundError - NoClassDefFoundError while running Roboelectric Unit Test
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM