我如何在spock中的setup方法中获取方法?

时间:2013-04-07 17:11:43

标签: java groovy junit4 spock

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

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

}

并且应该在设置方法中使用,如下所示:

def setup() {
    def dataset = currentTestMethod.getAnnotation().value //pseudo method
    prepareDB(dataset)
}

我对JUnit4做了同样的事情。我使用@Rule获取当前方法名称并获得每次反射的注释值。我怎么能在spock中做到这一点?

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

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

1 个答案:

答案 0 :(得分:1)

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

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