Java 如何在spock中的设置方法中获得该方法?

Java 如何在spock中的设置方法中获得该方法?,java,groovy,junit4,spock,Java,Groovy,Junit4,Spock,如何获得运行特性的方法?我想用不同的数据集准备数据库。应使用如下注释定义此数据集: @PrepareDB("dataset1") def "feature 1"() { } def setup() { def dataset = currentTestMethod.getAnnotation().value //pseudo method prepareDB(dataset) } 并应在如下设置方法中使用: @PrepareDB("dataset1") def "featu

如何获得运行特性的方法?我想用不同的数据集准备数据库。应使用如下注释定义此数据集:

@PrepareDB("dataset1")
def "feature 1"() {

}
def setup() {
    def dataset = currentTestMethod.getAnnotation().value //pseudo method
    prepareDB(dataset)
}
并应在如下设置方法中使用:

@PrepareDB("dataset1")
def "feature 1"() {

}
def setup() {
    def dataset = currentTestMethod.getAnnotation().value //pseudo method
    prepareDB(dataset)
}
我对JUnit4也这么做了。我使用@Rule获取当前方法名,并获取每个反射的注释值。我怎么能在斯波克做到这一点

更新: 我自己找到了解决办法。使用JUnit4中的TestWatcher,可以为当前运行的测试方法获取注释:

@Rule
public TestRule watcher = new TestWatcher() {
    protected void starting(Description description) {
        println description.getAnnotation(PrepareDB.class).value()
    };
};

我建议将数据库逻辑实现为注释驱动的Spock扩展或JUnit规则,这两种扩展都可以轻松访问已执行的feature方法的注释


为了回答您的问题,要从setup方法获取注释,您可以使用(从Spock 0.7开始)
specificationContext.iterationInfo.parent.featureMethod.reflection.getAnnotation(PrepareDB)
。在Spock 1.0-SNAPSHOT及更高版本中,这已更改为
specificationContext.currentFeature.featureMethod.getAnnotation(PrepareDB)

请添加您的答案,而不是更新部分。非常感谢。