web-dev-qa-db-ja.com

スポックのモックファイナルクラス

模擬最終クラスをスポックできますか?もしそうなら、どのように?検索結果でこれが表示されました 要点 これはそういう意味のようですが、その例は見つかりません。また、ファイナルクラスのモックはサポートされていないというフォーラムの投稿も見つかりました。

8
Julian A.

この仕様:

@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
@Grab('cglib:cglib-nodep:3.1')

import spock.lang.*

class Test extends Specification {
    def 'lol'() {
        given: 
        def s = Mock(String) {
            size() >> 10
        }

        expect:
        s.size() == 10        
    }
}

次の例外で終了します。

JUnit 4 Runner, Tests: 1, Failures: 1, Time: 29 Test Failure:
lol(Test) org.spockframework.mock.CannotCreateMockException:
Cannot create mock for class Java.lang.String because Java mocks cannot mock final classes.
If the code under test is written in Groovy, use Groovy mock.

解決策は、GroovyMockを使用することです。

@Grab('org.spockframework:spock-core:1.0-groovy-2.4')
@Grab('cglib:cglib-nodep:3.1')

import spock.lang.*

class Test extends Specification {
    def 'lol'() {
        given: 
        def s = GroovyMock(String) {
            size() >> 10
        }

        expect:
        s.size() == 10        
    }
}

これはうまくいきます。

20
Opal