我已经在 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)
我查看了这个问题/答案 -在 Spock 中使用 GroovyMock 或类似方法模拟静态方法- 希望它可以给我一个很好的起点,但在我的案例中被模拟的类 groovy.Sql 是一个 groovy 类,所以我不是确定这是正确的起点。
我已经使用 GroovyMock 在其他单元测试中成功地测试了 Groovy.Sql,但我希望也许我只是错过了一些可以做到这一点的东西,这样我就可以同时拥有 Spock 魔法和 Groovy SQL。如果我只是在某个地方错过了答案,我深表歉意 - 希望我不会重复别人的询问。