gpt4 book ai didi

unit-testing - 模拟扩展通用基类的 grails 服务时出现 IllegalArgumentException

转载 作者:行者123 更新时间:2023-12-02 14:50:12 27 4
gpt4 key购买 nike

单元测试:

class OtherServiceSpec extends Specification {
def fooCacheService = Mock(FooCacheService)
...
}

服务:
class FooCacheService extends CacheService<String> {
...
}

通用基类:
class CacheService<T> {
...
}

堆栈跟踪:
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:45)
at org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java:281)
at org.spockframework.lang.SpecInternals.MockImpl(SpecInternals.java:99)
at com.bsb.site.OtherServiceSpec.$spock_initializeFields(OtherServiceSpec.groovy:2)

最佳答案

我没有得到任何解释为什么会发生这种情况。我刚刚观察到 Mock() 在模拟接口(interface)的实现时会出现问题。

我通过模拟界面解决了这个问题。因此,在您的情况下,您应该使用以下命令构建您的模拟:

def cacheService = Mock(CacheService)

这当然也意味着您还必须通过使用接口(interface) 来实现有问题的类( OtherService )缓存服务 而不是 FooCacheService。

希望这可以帮助。

干杯
奥利弗

关于unit-testing - 模拟扩展通用基类的 grails 服务时出现 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321350/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com