Spock:“setup”方法从何而来?

Spock: where does method `setup` come from?

我知道设置规范(测试 class)和功能(测试方法)的方法分别是 setupSpecsetup...

我不太确定相应的 "tear down" 方法是什么,所以我想我会查找它。原来这些分别是 cleanupSpeccleanup,如记录 here.

但我还查阅了 Spock 1.2 API Java文档。不仅发现上述4种方法中的none是spock.lang.Specification的一种方法,而且查找这个Javadoc的索引我也没有找到任何参考。

显然 Spock 是 Groovy 而不是 Java,所以这也许可以用一些 Groovy 魔法来解释。任何人都可以解释这些方法来自哪里?

有趣的是,我实际上找不到 Spock 1.2 API Java 在线文档到 link 到。我从 Gradle.

下载的源 .jar 编译了我的

我试图在 spock 源代码中找到答案,我发现它使用 GroovyClassVisitor 来查找和执行此方法。

快速分解发生的事情:

Indentifiers.java class 包含常量,如方法名称(第 58 行)和包含所有 "fixture method names" 的集合(第 72 行)

SpecParser.java GroovyClassVisitor 解析所有规范,并尝试查找夹具方法并构建 FixtureMethods(第 131 行的方法 buildFixtureMethod)