testing - JUnit5 Spock 2,@ExtendWith 不起作用
问题描述
我正在尝试为我们的新项目建立测试平台。我们想将 Spock 2 与 JUnit 5 一起使用。
现在我想@ExtendWith
在基于 Spock 的测试中使用注释。
这是一个例子:
@SpringBootTest(classes = ExtensionTest.class)
@ExtendWith(ClassExtension.class)
class ExtensionTest extends Specification {
void "test"() {
when:
true
then:
noExceptionThrown()
}
}
给定 Extension ( ClassExtension
) 正在实现接口:BeforeAllCallback
和AfterAllCallback
.
class ClassExtension implements BeforeAllCallback, AfterAllCallback {
@Override
void beforeAll(ExtensionContext extensionContext) throws Exception {
...
}
@Override
void afterAll(ExtensionContext extensionContext) throws Exception {
...
}
}
不幸的是,它不起作用。扩展程序未运行。
我究竟做错了什么?
解决方案
Spock 2.x 没有使用 Jupiter Engine,而是实现了自己的SpockEngine
和SpockExecutionContext
基于 Jupiter API 的自己。显然它不支持 Jupiter 扩展,可能是因为 Spock 有自己的注解驱动和全局扩展的扩展机制。
底线:我建议将您的 JUnit Jupiter 扩展移植到 Spock 扩展。在那里,您还有更好的方法来连接 Spock 生命周期。
推荐阅读
- flutter - Back Button 重复,出现没有配置 Flutter
- c - 来自 C 中 getchar() 的 printf 格式字符
- kotlin - 利用挂起函数来实现 CPS 风格的解释器
- java - 在 JMPS 模块化应用程序中运行 Spring Boot 测试代码时出错
- java - 如何使用 Spring Boot 设置自定义登录?
- javascript - React Native StyleSheet.create 异常
- python-3.x - 多个基地在机器人框架中存在实例布局冲突
- bash - 根据条件修改bash命令的功能
- reactjs - 在 React 中全局使用 Socket.IO?
- elasticsearch - ElasticSearch 无法从字符串转换为 ElasticClient.searchRequestparameters