2

次のようなカスタムtaglibにメソッドがあります。

def deleteAction = {attrs ->
    def id = attrs['id']
    def type = attrs['type']
    def clazz = attrs['class']
    def html = new MarkupBuilder(out)
    html.span(class: "${clazz} ui-icon ui-icon-trash {id:'${id}'}")
}

このメソッドを使用するコントローラーがあり、単体テスト用にスタブしようとしているので、次のようになります。

def mockMyTagLib = mockFor(MyTagLib)
    mockMyTagLib.demand.deleteAction(1) {id, type, clazz ->
    def html = new MarkupBuilder(new StringWriter())
    html.span(class: "${clazz} ui-icon ui-icon-trash {id:'${id}'}")
}

controller.metaClass.mn = mockMyTagLib.createMock()

しかし、私は次のことを続けています:

この時点で、「deleteAction」の呼び出しはこれ以上ないと予想されます。要求の終了。

ここで何か間違ったことをしていますか?コントローラーでの実際の使用法は次のとおりです。

"${mn.deleteAction(id: it.id, type: 'bookProduct', 'class': 'del-book-product')}"
4

1 に答える 1

2

以下はテストからのものです - リファレンスドキュメント

... 次に、オプションの範囲を引数としてモックするメソッドの名前を指定します。この範囲は、メソッドが呼び出されると予想される回数を決定するため、呼び出しの数がその範囲外になると (少なすぎるか多すぎる)、アサーション エラーがスローされます。範囲が指定されていない場合、デフォルトの "1..1" が想定されます。つまり、メソッドを 1 回だけ呼び出す必要があります。

demand.deleteAction(1) を指定しました。これは、メソッドを一度だけ呼び出す必要があることを意味します。

また、必要に応じて、mockFor の 2 番目のパラメーターとして指定することで、いつでもモックをルーズに設定できます (デフォルトは strict です)。

mockFor(class, loose = false)
于 2011-04-18T03:32:21.753 に答える