温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - Is it possible to have a global setup method in Spock test?
grails groovy java unit-testing spock

java - Spock测试中是否可以使用全局设置方法?

发布于 2020-04-14 10:57:17

我是Grails / Groovy应用程序的开发人员,该应用程序使用Spock作为其单元测试框架。该项目大约有1000个单元测试,而我实质上想在运行所有测试之前执行特定的模拟/操作。最好只执行一次,或者在每个测试之前-或者在所有测试的某个较大子集之前执行一次。我想象有可能有一种“全局”设置方法,所有测试都可以扩展。这可能吗?

查看更多

提问者
Birdie
被浏览
80
Birdie 2020-02-03 18:07

我们最终做了以下工作。首先,我们定义一个实现IAnnotationDrivenExtension接口的类:

class MockConfigMapExtension implements IAnnotationDrivenExtension<MockConfigMap> {

    @Override
    void visitSpecAnnotation(MockConfigMap annotation, SpecInfo spec) {
        // WRITE THE RELEVANT STARTUP CODE HERE
    }

    @Override
    void visitFeatureAnnotation(MockConfigMap annotation, FeatureInfo feature) {
    }

    @Override
    void visitFixtureAnnotation(MockConfigMap annotation, MethodInfo fixtureMethod) {
    }

    @Override
    void visitFieldAnnotation(MockConfigMap annotation, FieldInfo field) {
    }

    @Override
    void visitSpec(SpecInfo spec) {
    }
}

在这里定义了这个简单的注释:

@Retention(RetentionPolicy.RUNTIME)
@Target([ElementType.TYPE])
@ExtensionAnnotation(MockConfigMapExtension.class)
@interface MockConfigMap {
}

现在,每当我们用MockConfigMap注释对Spec类进行注释时,都会调用visitSpecAnnotation方法,并获得所需的行为。