Java 在Spock测试中是否可能有全局设置方法?

Java 在Spock测试中是否可能有全局设置方法?,java,unit-testing,grails,groovy,spock,Java,Unit Testing,Grails,Groovy,Spock,我是Grails/Groovy应用程序的开发人员,该应用程序使用Spock作为单元测试框架。该项目大约有1000个单元测试,我基本上希望在运行所有测试之前执行一个特定的模拟/操作。最好只执行一次,或者在每次测试之前,或者在所有测试的某个较大子集之前。我认为有一种“全局”的设置方法是可能的,所有的测试都可以扩展。这可能吗 最好只执行一次,或者在每次执行之前执行一次 测试-或在所有测试的某个较大子集之前。我想它 可能有一个“全局”设置方法,所有测试都可以 延伸这可能吗 是的,这是可能的。如何最好地实

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

最好只执行一次,或者在每次执行之前执行一次 测试-或在所有测试的某个较大子集之前。我想它 可能有一个“全局”设置方法,所有测试都可以 延伸这可能吗

是的,这是可能的。如何最好地实现它的具体细节将具体取决于您想要实现什么,但全局扩展可能是候选项。有关详细信息,请参阅的“编写自定义扩展”部分。这里有很大的灵活性。我们在为Micronaut编写自定义扩展方面取得了巨大成功

我希望这有帮助

最好只执行一次,或者在每次执行之前执行一次 测试-或在所有测试的某个较大子集之前。我想它 可能有一个“全局”设置方法,所有测试都可以 延伸这可能吗

是的,这是可能的。如何最好地实现它的具体细节将具体取决于您想要实现什么,但全局扩展可能是候选项。有关详细信息,请参阅的“编写自定义扩展”部分。这里有很大的灵活性。我们在为Micronaut编写自定义扩展方面取得了巨大成功


我希望这能有所帮助。

我们最后做了以下几点。首先,我们定义了一个实现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) {
    }
}

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

我们最终执行了以下操作。首先,我们定义了一个实现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) {
    }
}

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

谢谢,如果我成功了,我将尝试并提供一个示例。太好了。我们为Micronaut开发的扩展位于。在您开始编写自己的扩展之前,为什么不使用所有相关规范扩展的
setup
和/或
setupSpec
方法创建一个基类/规范?这是正常的OOP,在Spock/Geb中运行良好。谢谢,如果我成功了,我会尝试并提供一个示例。太好了。我们为Micronaut开发的扩展位于。在您开始编写自己的扩展之前,为什么不使用所有相关规范扩展的
setup
和/或
setupSpec
方法创建一个基类/规范?这是正常的面向对象编程,在Spock/Geb中运行良好。