【问题标题】:Error NoClassDefFoundError while running Junit test运行 Junit 测试时出现错误 NoClassDefFoundError
【发布时间】:2020-05-20 04:05:39
【问题描述】:

当我运行这个脚本来自动化时:

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 {

}

我用:

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

我在 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

【问题讨论】:

    标签: java selenium cucumber


    【解决方案1】:

    我用:

    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
    

    您似乎正在手动下载 jar 文件。这不是我推荐的做法。如果您关注10 minute tutorial,您将获得使用 Maven 依赖管理的介绍。

    除了本教程之外,我强烈建议您花时间学习 Maven 或 Gradle 以及 Cucumber。除其他外,这些工具将自动化您的依赖管理,这可以让您的生活更轻松。

    例如:

    如果您想将 Cucumber 与 JUnit 4 和基于注释的步骤定义一起使用,您可以在 Maven pom.xml 文件中声明这组最小的依赖项。

        <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>
    

    通过告诉 Maven 你的依赖是什么,Maven 可以计算出你的传递依赖,即:你的依赖的依赖。

    这有很多优点。一个示例是使用mvn dependency:tree 命令列出所有依赖项。这比手动下载 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] ------------------------------------------------------------------------
    

    【讨论】:

      【解决方案2】:

      我相信缺少以下依赖项。您能否在您的项目中添加以下依赖项。版本必须与其他黄瓜依赖项相同。

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

      【讨论】:

        猜你喜欢
        • 2020-04-11
        • 1970-01-01
        • 2013-01-01
        • 1970-01-01
        • 2013-05-29
        • 2015-06-01
        • 2022-11-03
        • 1970-01-01
        • 2017-10-20
        相关资源
        最近更新 更多