I'm not able to spy java.io.File. Following spec (working in Groovy console) demonstrates the exception I'm getting. It seems that the class to spyt must have a default constructor, does it?
@Grab('org.spockframework:spock-core:0.7-groovy-2.0')
import spock.lang.Specification
class FileSpySpec extends Specification {
def setup() {
GroovySpy(File, global: true)
}
def 'file spy'() {
expect: true
}
}
org.spockframework.mock.CannotCreateMockException: Cannot create mock for class java.io.Filenull
at org.spockframework.mock.runtime.MockInstantiator.instantiate(MockInstantiator.java:38)
at org.spockframework.mock.runtime.GroovyMockFactory.create(GroovyMockFactory.java:54)
at org.spockframework.mock.runtime.CompositeMockFactory.create(CompositeMockFactory.java:44)
at org.spockframework.lang.SpecInternals.createMock(SpecInternals.java:47)
at org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java:282)
at org.spockframework.lang.SpecInternals.GroovySpyImpl(SpecInternals.java:267)
at FileSpySpec.setup(spec.groovy:7)
Caused by: org.codehaus.groovy.runtime.metaclass.MethodSelectionException: Could not find which method <init>() to invoke from this list:
public java.io.File#<init>(java.net.URI)
private java.io.File#<init>(java.lang.String, int)
private java.io.File#<init>(java.lang.String, java.io.File)
public java.io.File#<init>(java.lang.String)
public java.io.File#<init>(java.lang.String, java.lang.String)
public java.io.File#<init>(java.io.File, java.lang.String)
at org.spockframework.mock.runtime.GroovyRealMethodInvoker.respond(GroovyRealMethodInvoker.java:34)
at org.spockframework.mock.runtime.MockInvocation.callRealMethod(MockInvocation.java:60)
at org.spockframework.mock.CallRealMethodResponse.respond(CallRealMethodResponse.java:29)
at org.spockframework.mock.runtime.MockController.handle(MockController.java:49)
at org.spockframework.mock.runtime.GroovyMockMetaClass.doInvokeMethod(GroovyMockMetaClass.java:104)
at org.spockframework.mock.runtime.GroovyMockMetaClass.invokeConstructor(GroovyMockMetaClass.java:50)
at org.spockframework.mock.runtime.MockInstantiator.instantiate(MockInstantiator.java:33)