当前位置: 首页 > 知识库问答 >
问题:

运行时异常在Spock中模拟Groovy.sql

东方河
2023-03-14

我在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)

我看了这个问题/答案--用Stock中的GroovyMock或类似的方法模拟静态方法--希望它能给我一个好的起点,但是在我的例子中被模拟的类groovy.sql是一个groovy类,所以我不确定它是正确的起点。

我已经在使用GroovyMock的其他单元测试中成功地测试了Groovy.SQL,但我希望我只是错过了一些可以使它更好地使用Spock magic和Groovy SQL的东西。如果我只是在某处漏了答案,我很抱歉--希望我不是在重复别人的询问。

共有1个答案

卢普松
2023-03-14

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

 类似资料:
  • 这里,在引擎盖下调用。因此,我需要我的模拟实例返回(指示失败的auth),或者在发生意外情况时抛出。 你知道我该怎么做吗?

  • 在运行spock测试时,我需要帮助模拟一个类及其从yaml文件获得的数据。我有一个用groovy编写的microservice,它根据yaml文件中的字段名参数进行字段映射。 我有一个projectProperties类,它从yaml文件中提取数据。 这个类将从 /src/main/resourcesapplication.yaml文件中提取变量值 当我运行spock测试时,它无法从project

  • 尝试为使用的演示者运行JUnit测试时,遇到RuntimeException。 由于它们是纯JUnit测试,而不是Android instrumentation测试,因此它们没有访问Android依赖项的权限,导致我在执行测试时遇到以下错误:

  • 我有一个用注释的Groovy类,因此它得到一个私有的最终字段,我想测试它的用法。我想继续使用,而不是为了启用测试而进一步公开字段。 我正在使用Spock1.0编写测试,并尝试使用Spock的集成、模拟和截尾功能来完成测试。全局截尾可以帮助我截取调用以获得实际的实例,因此我目前的猜测是: 有趣的是,拦截实际上起作用了,确认类实际上获得了名为“dummy”的类型“logger”的对象

  • 我在命令行窗口(Windows7)中使用以下命令启动jcwde: 然后我启动一个新的命令行窗口,并在那里启动apdutool: 以下是。scr脚本文件:powerup;

  • 所以我想做一些事情 但我得到了空异常