是否可以在评估功能的清理块之前拦截 Spock 功能的执行?

Is it posible to intercept a Spock feature's execution just prior to the evaluation of a feature's cleanup block?

自定义 Spock 注释是否有任何方法可以在每个 cleanup 块执行之前拦截功能的执行?我意识到我可以在执行规范的 cleanup() 方法之前进行拦截,但我希望在 cleanup 块 运行ning.[=20 的内容之前拦截该功能=]

例如:

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 块之前进行拦截。当我在 visitSpec() 时,我试图通过 addCleanupInterceptor 注册拦截器,但无济于事。我似乎直到所有功能块都已执行之后才命中此拦截器,而不是在 bar() 为 运行 之前。

答案是否定的。这已在 Spock issue #538 之前提出要求,但尚未实施。即使 Spock 2.0(基于 JUnit 5 Jupiter 并与 Groovy 3 兼容)在门前(里程碑 2 构建已经发布了一段时间),这个功能似乎也没有计划发布。