首页 > 解决方案 > 由于 java.lang.ClassNotFoundException: cucumber.runner.TimeServiceEventBus,Serenity/Cucumber 测试未运行

问题描述

当我从命令行运行我的 Serenity BDD 测试时,我得到以下堆栈跟踪:

initializationError(net.persgroep.targetqa.webTests.WebTest)  Time elapsed: 0.002 s  <<< ERROR!
java.lang.NoClassDefFoundError: cucumber/runner/TimeServiceEventBus
Caused by: java.lang.ClassNotFoundException: cucumber.runner.TimeServiceEventBus

在 Serenity 聊天中,他们建议我更改依赖项版本。所以我这样做了,但我仍然有错误。

这些是我的 pom 文件中的依赖项:

   <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-core</artifactId>
        <version>${serenity.version}</version>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>io.cucumber</groupId>
                <artifactId>cucumber-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${cucumber.version}</version>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber.version}</version>
    </dependency>
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-junit</artifactId>
        <version>${serenity.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-screenplay</artifactId>
        <version>${serenity.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-screenplay-webdriver</artifactId>
        <version>${serenity.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>



    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-model</artifactId>
        <version>${serenity.version}</version>
    </dependency>
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-cucumber</artifactId>
        <version>1.9.48</version>
    </dependency>
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-core</artifactId>
        <version>${serenity.version}</version>
    </dependency>

版本:

 <serenity.version>2.0.89</serenity.version>
        <serenity.maven.version>2.0.89</serenity.maven.version>
        <serenity.cucumber.version>1.9.48</serenity.cucumber.version>
        <cucumber.version>4.8.0</cucumber.version>

它以前可以工作,一些团队成员建议我应该使用声明式编程,所以我们更改了一些 for 循环,我想检查测试是否仍在运行。那是我得到这个错误的时候。

标签: javacucumberserenity-bddcucumber-serenity

解决方案


首先你有一个排除:

    <exclusions>
        <exclusion>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-core</artifactId>
        </exclusion>
    </exclusions>

应该解释“ClassNotFoundException:cucumber.runner.TimeServiceEventBus”错误。

此外,您有重复的依赖项。你真的应该调查一下 Maven 给你的所有警告。最后,通过明确声明 Serenity 的各个部分,您将可能不兼容的 Serenity 部分强加给自身。除非你有一个特别好的理由,否则你真的应该避免这种情况!

无论如何,一个简单的依赖:

            <dependency>
                    <groupId>net.serenity-bdd</groupId>
                    <artifactId>serenity-cucumber</artifactId>
                    <version>${serenity.version}</version>
            </dependency>

带来你需要的一切:所有的 Cucumber、所有的 Selenium、JUnit,当然还有所有的 Serenity。

您还可以使用:

            <dependency>
                    <groupId>net.serenity-bdd</groupId>
                    <artifactId>serenity-cucumber4</artifactId>
                    <version>${serenity.version}</version>
            </dependency>

如果你想使用 Cucumber 版本 4,请注意那里的额外4。虽然我上次检查过(诚然已经有一段时间了),但这仍然是实验性的。

看看mvn dependency:tree以确保。


推荐阅读