首页 > 解决方案 > 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) 正在实现接口:BeforeAllCallbackAfterAllCallback.

class ClassExtension implements BeforeAllCallback, AfterAllCallback {
    @Override
    void beforeAll(ExtensionContext extensionContext) throws Exception {
       ...
    }

    @Override
    void afterAll(ExtensionContext extensionContext) throws Exception {
       ...
    }
}

不幸的是,它不起作用。扩展程序未运行。

我究竟做错了什么?

标签: testingspockjunit5

解决方案


Spock 2.x 没有使用 Jupiter Engine,而是实现了自己的SpockEngineSpockExecutionContext基于 Jupiter API 的自己。显然它不支持 Jupiter 扩展,可能是因为 Spock 有自己的注解驱动和全局扩展的扩展机制。

底线:我建议将您的 JUnit Jupiter 扩展移植到 Spock 扩展。在那里,您还有更好的方法来连接 Spock 生命周期。


推荐阅读