Unit testing 在Spock中模拟groovy.sql时出现运行时异常

Unit testing 在Spock中模拟groovy.sql时出现运行时异常,unit-testing,groovy,spock,groovy-sql,Unit Testing,Groovy,Spock,Groovy Sql,我已经搜索了StackOverflow和Google一段时间,试图找到能够在Spock规范中运行此代码的正确配置/语法: Sql mockSql = Mock() 但是,当我运行单元测试时,CGLIB在我面前抛出了一个令人讨厌的异常: java.lang.IllegalAccessError: tried to access method groovy.sql.Sql.<init>()V from class groovy.sql.Sql$$EnhancerByCGLIB$$d0b

我已经搜索了StackOverflow和Google一段时间,试图找到能够在Spock规范中运行此代码的正确配置/语法:

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)
java.lang.IllegalAccessError:试图从groovy.sql.sql$$enhancerbyglib$$d0b7cd7f类访问groovy.sql.sql。()V方法
位于org.spockframework.mock.runtime.MockInstantiator.instantiate(MockInstantiator.java:33)
位于org.spockframework.mock.runtime.ProxyBasedMockFactory$CglibMockFactory.createMock(ProxyBasedMockFactory.java:92)
位于org.spockframework.mock.runtime.ProxyBasedMockFactory.create(ProxyBasedMockFactory.java:49)
位于org.spockframework.mock.runtime.JavaMockFactory.create(JavaMockFactory.java:51)
位于org.spockframework.mock.runtime.CompositeMockFactory.create(CompositeMockFactory.java:44)
位于org.spockframework.lang.SpecInternals.createMock(SpecInternals.java:47)
位于org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java:282)
位于org.spockframework.lang.SpecInternals.MockImpl(SpecInternals.java:83)
我看了这个问题/答案——希望它能给我一个好的起点,但是在我的例子中被嘲笑的类groovy.Sql是一个groovy类,所以我不确定它是一个正确的起点


我已经在使用GroovyMock的其他单元测试中成功地测试了Groovy.Sql,但我希望我错过了一些可以让它成功的东西,这样我就可以让Spock magic和Groovy Sql一起快乐了。如果我只是错过了某个地方的答案,我深表歉意-希望我没有重复其他人的询问。

当使用Spock模拟类(而不是接口)时,建议将objeness-1.2或更高版本放在测试运行时类路径上(除了CGLIB)。否则,Spock将无法避免执行要模拟的类的构造函数,这可能会产生不希望的副作用。

这行吗?Spock和groovy的哪个版本?Spock是0.7,groovy是2.2.2。Sql=Mock(Sql)我刚才试过了,没用。似乎这可能是类路径/兼容性问题,因为其他人似乎对这种模拟没有问题。Spock
Spock 0.7-groovy-2.0
yeah?你能在绿地项目中尝试一下吗?我试试看。依赖项版本正确。是否已将
objenesis
添加到测试运行时类路径?