Java 8でSpockのモック生成がエラーになる件
Java 8でSpockを使ってJavaクラスのモックを作成しようとしたらエラーが出ました。 Groovyクラスのモックではエラーは出ません。
class ExampleSpec extends Specification { def "shell should write stdout to #logging"() { given: def out = System.out System.out = Mock(PrintStream) when: //... then: System.out.println('some message') cleanup: System.out = out } }
java.lang.IllegalArgumentException at net.sf.cglib.proxy.BridgeMethodResolver.resolveAll(BridgeMethodResolver.java:61) at net.sf.cglib.proxy.Enhancer.emitMethods(Enhancer.java:911) at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:498) at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216) at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377) at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:317) at org.spockframework.mock.runtime.ProxyBasedMockFactory$CglibMockFactory.createMock(ProxyBasedMockFactory.java:91) at org.spockframework.mock.runtime.ProxyBasedMockFactory.create(ProxyBasedMockFactory.java:49) at org.spockframework.mock.runtime.JavaMockFactory.create(JavaMockFactory.java:51) 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.MockImpl(SpecInternals.java:99)
どうやらCGLIBがJava 8に対応していないことが原因のようです。 気長に対応版を待ちましょうか。
https://groups.google.com/forum/#!topic/spockframework/59WIHGgcSNE
確認した環境:
- JDK 8u25
- Groovy 2.3.6