我是Grails / Groovy应用程序的开发人员,该应用程序使用Spock作为其单元测试框架。该项目大约有1000个单元测试,而我实质上想在运行所有测试之前执行特定的模拟/操作。最好只执行一次,或者在每个测试之前-或者在所有测试的某个较大子集之前执行一次。我想象有可能有一种“全局”设置方法,所有测试都可以扩展。这可能吗?
答案 0 :(得分:2)
最好只执行一次,或者每次执行一次 测试-或在所有测试的某个较大子集之前进行。我想它 可能有一种“全局”设置方法,所有测试都可以 延伸。这可能吗?
是的,有可能。最佳方法的具体细节将取决于您要完成的工作,但是全局扩展可能是候选对象。有关更多详细信息,请参见http://spockframework.org/spock/docs/1.3/extensions.html的“编写自定义扩展名”部分。那里有很多灵活性。我们为Micronaut编写自定义扩展取得了巨大的成功。
我希望能帮上忙。
答案 1 :(得分:0)
我们最终做了以下工作。首先,我们定义一个实现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方法,并获得所需的行为。