Groovy Gradle抱怨“失踪”;“设置方法”;具有初始集成测试结构

Groovy Gradle抱怨“失踪”;“设置方法”;具有初始集成测试结构,groovy,gradle,spock,nebula-test,Groovy,Gradle,Spock,Nebula Test,我正在写我的第一个Gradle插件。默认构建工作正常,包括少量的单元测试。我现在正试图使用nebula.test建立一个集成测试基础设施 我创建了一个空的集成测试类,以及build.gradle中的设置,用于配置“integTest”任务以及相关的源集和依赖项。我使用了网上的几个例子和github上现有的插件来指导我 在显示代码之前,我得到的错误如下: groovy.lang.MissingPropertyException:没有这样的属性:setupMethod for class:org.s

我正在写我的第一个Gradle插件。默认构建工作正常,包括少量的单元测试。我现在正试图使用nebula.test建立一个集成测试基础设施

我创建了一个空的集成测试类,以及build.gradle中的设置,用于配置“integTest”任务以及相关的源集和依赖项。我使用了网上的几个例子和github上现有的插件来指导我

在显示代码之前,我得到的错误如下:

groovy.lang.MissingPropertyException:没有这样的属性:setupMethod for class:org.spockframework.runtime.model.SpecInfo 可能的解决方案:设置方法

这是我的“build.gradle”文件:

下面是我的简单集成测试规范(我在第一次尝试后添加了一个“def”,这没有什么区别):

更新

这是错误的完整堆栈跟踪

groovy.lang.MissingPropertyException:没有这样的属性:setupMethod for class:org.spockframework.runtime.model.SpecInfo 可能的解决方案:设置方法 位于org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:51) 位于org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:63) 位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227) 在com.energizedwork.spock.extensions.TempDirectoryInterceptor.install(TempDirectoryExtension.groovy:92)上 位于com.energizedwork.spock.extensions.TempDirectoryInterceptor$install.call(未知源) 位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 在com.energizedwork.spock.extensions.TempDirectoryExtension.visitfieldnotation(TempDirectoryExtension.groovy:21)上 在com.energizedwork.spock.extensions.TempDirectoryExtension.visitfieldnotation(TempDirectoryExtension.groovy)上 位于org.spockframework.runtime.ExtensionRunner.dorunnotationdrivenextensions(ExtensionRunner.java:100) 位于org.spockframework.runtime.ExtensionRunner.runAnnotationDrivenExtensions(ExtensionRunner.java:65) 位于org.spockframework.runtime.ExtensionRunner.runAnnotationDrivenExtensions(ExtensionRunner.java:60) 位于org.spockframework.runtime.ExtensionRunner.runAnnotationDrivenExtensions(ExtensionRunner.java:51) 位于org.spockframework.runtime.ExtensionRunner.run(ExtensionRunner.java:41) 在org.spockframework.runtime.Sputnik.runextensionsifrequired上(Sputnik.java:88) 位于org.spockframework.runtime.Sputnik.getDescription(Sputnik.java:55) 位于org.gradle.api.internal.tasks.testing.junit.junitsetclassexecuter.runTestClass(junitsetclassexecuter.java:83) 位于org.gradle.api.internal.tasks.testing.junit.junitsetclassexecuter.execute(junitsetclassexecuter.java:49) 位于org.gradle.api.internal.tasks.testing.junit.junitestclassprocessor.processTestClass(junitestclassprocessor.java:64) 位于org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:50) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:606) 位于org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) 位于org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) 位于org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) 位于org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) 位于com.sun.proxy.$Proxy2.processTestClass(未知源) 位于org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:106) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:606) 位于org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) 位于org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) 位于org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:360) 位于org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 运行(Thread.java:744)

然后我尝试在调试器中单步执行此代码。我能够在AbstractCallSite.callGetProperty()的第227行找到断点。在我的测试用例中,它多次碰到这个断点。我还在GetEffectivePojoPropertySite.getProperty()的第63行设置了一个断点,但由于某些原因,它从未到达该断点

“callGetProperty()”方法如下所示:

public Object callGetProperty(Object receiver) throws Throwable {
    return acceptGetProperty(receiver).getProperty(receiver); // 227
}
public final Object getProperty(Object receiver) throws Throwable {
    try {
        return effective.getProperty(receiver); // line 61
    } catch (GroovyRuntimeException gre) {
        throw ScriptBytecodeAdapter.unwrap(gre); // line 63
    }
}
该方法如下所示:

public Object callGetProperty(Object receiver) throws Throwable {
    return acceptGetProperty(receiver).getProperty(receiver); // 227
}
public final Object getProperty(Object receiver) throws Throwable {
    try {
        return effective.getProperty(receiver); // line 61
    } catch (GroovyRuntimeException gre) {
        throw ScriptBytecodeAdapter.unwrap(gre); // line 63
    }
}
由于第63行在catch子句中,我还在第61行设置了一个断点,并且该断点也不会被击中

更新

另一个有趣的点是TempDirectoryInterceptor.install()方法调用stacktrace:

@Override
void install(SpecInfo spec) {
    spec.setupMethod.addInterceptor this // line 92
    spec.cleanupMethod.addInterceptor this
}
有“设置方法”,但我不知道应该是什么。啤酒