我在StackOverflow和Google上搜索了一段时间,试图找到正确的配置/语法,以便在Spock Specification中运行此代码:
Sql mockSql = Mock()
然而,当我运行单元测试时,CGLIB会抛出一个让人不爽的异常:
java.lang.IllegalAccessError: tried to access method groovy.sql.Sql.<init>()V from class groovy.sql.Sql$$EnhancerByCGLIB$$d0b7cd7f
at org.spockframework.mock.runtime.MockInstantiator.instantiate(MockInstantiator.java:33)
at org.spockframework.mock.runtime.ProxyBasedMockFactory$CglibMockFactory.createMock(ProxyBasedMockFactory.java:92)
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:83)
我看了这个问题/答案 - Mock static method with GroovyMock or similar in Spock - 希望它能给我一个好的起点,但是在我的情况下被模拟的类groovy.Sql是一个Groovy类,所以我不确定这是否是正确的起点。
我已经成功地使用GroovyMock在其他单元测试中测试了Groovy.Sql,但我希望可能我只是错过了一些可以使Spock魔法和Groovy SQL一起愉快的东西。如果我只是错过了答案,请谅解 - 希望我没有重复别人的询问。
spock 0.7-groovy-2.0
是吧?你能在一个全新的项目中尝试它吗? - tim_yatesobjenesis
添加到你的测试运行时类路径中? - Peter Niederwieserobjenesis
就是那个东西。如果你把它作为答案,我会接受并投票支持它。 - Jason Lowenthal