是否可以在评估功能的清理块之前拦截 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 构建已经发布了一段时间),这个功能似乎也没有计划发布。
自定义 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 构建已经发布了一段时间),这个功能似乎也没有计划发布。