IllegalArgumentException при насмешке над сервисом grails, который расширяет базовый базовый класс
Модульный тест:
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)
1 ответ
Я не получил никакого объяснения, почему это происходит. Я только что заметил, что Mock() получает проблему, когда высмеивает реализацию интерфейса.
Я решил эту проблему, издеваясь над интерфейсом. Так что в вашем случае вы должны создать свой макет с помощью этой команды:
def cacheService = Mock(CacheService)
Это, конечно, также означает, что вы также должны реализовать свой класс (OtherService), используя интерфейс CacheService, а не FooCacheService.
Надеюсь это поможет.
Ура Оливер