Возможно ли перехватить выполнение функции Спока непосредственно перед оценкой блока очистки функции? - PullRequest
1 голос
/ 18 апреля 2020

Есть ли способ для пользовательской аннотации Спока перехватить выполнение функции перед выполнением каждого блока cleanup? Я понимаю, что могу перехватить перед выполнением метода spe c s 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 ().

1 Ответ

2 голосов
/ 18 апреля 2020

Ответ - нет. Это было запрошено ранее в выпуске Спока # 538 , но пока не реализовано. Даже с Spock 2.0 (на основе JUnit 5 Jupiter и совместимым с Groovy 3) перед дверью (сборка milestone 2 была выпущена некоторое время go), эта функция, похоже, не планируется к выпуску.

...