cucumber 的 ruby 版本支持全局 before hook。放置在 features/support 目录中的 *.rb 文件显然只被调用一次,在任何和所有场景运行之前。 参见 https://github.com/cucumber/cucumber/wiki/Hooks#global-hooks
这似乎是确保数据库(在测试期间以只读方式使用)在任何测试运行之前被填充(因此处于已知状态)的好方法。
Cucumber 的 Java 版本是否有类似的功能?
最佳答案
Cucumber JVM 本身没有这样的功能(请参阅 https://github.com/cucumber/cucumber-jvm/issues/515)。
但是,有一些解决方法:
- 使用测试框架的 Hook :
@BeforeAll
和@AfterAll
用于 JUnit 5,@BeforeClass
和@AfterClass
用于 JUnit 4
- 使用 Cucumber
Before
Hook 进行惰性单例初始化,并使用 JVM 关闭 Hook 进行拆卸 - 实现 Cucumber
EventListener
并订阅TestRunStarted
和TestRunFinished
事件 - 使用构建框架的集成测试生命周期功能,例如Maven 的
pre-integration-test
、integration-test
、post-integration-test
阶段和maven-failsafe-plugin
.
您还必须解决将此类设置步骤的结果(例如随机端口号)注入(inject)测试的问题。
我写了一篇博客文章来涵盖所有细节:https://metamorphant.de/blog/posts/2020-03-10-beforeall-afterall-cucumber-jvm-junit/
关于java - cucumber-jvm 的全局 BeforeAll Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19770103/