2

私はスポックの相互作用を理解したと思いましたが、私はまだ写真のいくつかの部分が欠けていることを管理する必要があります。

了解しました。ここで私の問題です。同じサービスクラスのvoidメソッドの呼び出しなど、いくつかの操作を実行するGrailsサービスのメソッドがあります。コードは次のとおりです。

class myService {
    void myStuff(def myObj, params) {
        // do my stuff

        anotherMethod(myObj)

        //do my stuff again
    }

    void anotherMethod(myObj) {
        // do other stuff
    }
}

myStuffメソッドがanotherMethodを呼び出して、正しい動作をテストおよび文書化することを確認したいと思います。

だから、これが私のスポック仕様クラスのテストです:

void 'test myStuff method'() {
    given: 'my object and some params'    
        // doesn't really matter what I'm doing here
        MyObject myObj = new MyObject()
        params = [title: 'my object']

    when: 'we call myStuff()'
        service.myStuff(myObj, params)

    then: 'anotherMethod() is called exactly one times'
        1 * service.anotherMethod(myObj)
    }
}

私が得るエラーは次のとおりです。

Too few invocations for:

1 * service.anotherMethod(myObj)   (0 invocations)

どう思いますか?どうしたの?

いつものように、よろしくお願いします。

4

1 に答える 1

4

あなたは、テスト中のクラスのメソッドがモックされる部分モックと呼ばれる、非常に特別な、そして一般的に推奨されない形式のモックを求めています。Spock は 0.7 からこれをサポートしていますが、ではなくを作成する必要があります。また、プライベート メソッドをモックできないことにも注意してください。スパイの詳細については、リファレンス ドキュメントを参照してください。Spy()Mock()

于 2012-11-27T20:12:52.623 に答える