1

単体テスト:

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)
4

1 に答える 1

0

なぜこれが起こるのか説明がありません。インターフェイスの実装をモックするときに Mock() に問題があることを確認しました。

インターフェイスをモックすることでこの問題を解決しました。したがって、あなたの場合、次のコマンドでモックを作成する必要があります。

def cacheService = Mock(CacheService)

これはもちろん、FooCacheService ではなくインターフェイスCacheServiceを使用して、問題のクラス ( OtherService )を実装する必要があることも意味します。

お役に立てれば。

乾杯 オリバー

于 2016-03-09T13:44:00.060 に答える