自定义Spock注释是否可以在执行每个cleanup
块之前拦截某个功能的执行?我意识到我可以在执行规范的cleanup()
方法之前进行拦截,但是我希望在cleanup
块的内容运行之前就对其进行拦截。
例如:
class Extension extends AbstractAnnotationDrivenExtension<Extension>{
@Override
void visitSpec(SpecInfo s){
s.addCleanupInterceptor(new Inter())
}
}
class Inter implements IMethodInterceptor{
@Override
void intercept(IMethodInvocation inv){
println inv.getMethod().getKind()
inv.proceed()
}
}
@CatchErrors
class SampleTest extends Specification {
def "A sample feature"(){
when:
foo()
then:
false
cleanup:
println "In cleanup block"
bar()
}
}
哪个输出:In cleanup block \n CLEANUP
[在上面的示例中,我想在执行最后一个cleanup
块之前进行拦截。我在addCleanupInterceptor
时尝试通过visitSpec()
注册拦截器,但无济于事。在功能的所有块都执行完之后,而不是在bar()运行之前,我似乎没有碰到这个拦截器。
答案为否。之前在Spock issue #538中已要求执行此操作,但尚未实现。即使在门前安装了Spock 2.0(基于JUnit 5 Jupiter并与Groovy 3兼容)(里程碑2版本已经发布了一段时间),似乎也未计划发布此功能。