运行Junit测试时出现错误NoClassDefFoundError

时间:2020-05-20 04:05:39

标签: java selenium cucumber

当我运行此脚本以实现自动化时:

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

2 个答案:

答案 0 :(得分:2)

我使用:

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

答案 1 :(得分:1)

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

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