java - 由于 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 循环,我想检查测试是否仍在运行。那是我得到这个错误的时候。
解决方案
首先你有一个排除:
<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
以确保。
推荐阅读
- r - 确定哪一行 data.frame 与向量完全匹配
- python - 单击功能未按预期工作。我该如何解决?
- javascript - javascript & api 调用:如何获取从 api 调用返回的值?
- typescript - 两个具有静态返回类型的 TypeScript 函数。语法不同,但它们似乎做同样的事情?
- python - 如何使用另一个列表中的元素初始化新列表
- javascript - 如何在 then() 方法中发送响应,然后是另一个 then() 方法?
- python - 为什么 collections.Counter 或 .count() 在这里没有给出正确答案?
- java - 如何使用 java 运行 UFT 脚本
- ios - 如何检索评论/帖子的键
- r - 使用 ifelse 函数重命名百分比值