16

基本的にメールビルダーであるモックを使用して、流暢なインターフェイスをモックしたいと思います。

this.builder()
            .from(from)
            .to(to)
            .cc(cc)
            .bcc(bcc)
            .template(templateId, templateParameter)
            .send();

これを Spock でモックする場合、次のような多くの設定が必要です。

def builder = Mock(Builder)
builder.from(_) >> builder
builder.to(_) >> builder 

ユースケースによっては、モックとの特定の相互作用をテストしたい場合は、さらに面倒になります。だから私は基本的にここで2つの質問を得ました:

  1. すべてのテスト ケースで再利用できるメソッドで流暢なインターフェイスの一般的な 1 回限りのセットアップを実行し、テスト ケースごとに追加のルールを指定できるように、モック ルールを組み合わせる方法はありますか?
  2. より少ないコードで流暢なインターフェイスのモックを指定する方法はありますか。たとえば、次のようなものです。

    def builder = Mock(Builder) builder./(from|to|cc|bcc|template)/(*) >>ビルダー

    または Mockito のディープ スタブに相当するもの ( http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#RETURNS_DEEP_STUBSを参照)

4

1 に答える 1

18

次のようなことができます。

def "stubbing and mocking a builder"() {
    def builder = Mock(Builder)
    // could also put this into a setup method
    builder./from|to|cc|bcc|template|send/(*_) >> builder

    when:
    // exercise code that uses builder

    then:
    // interactions in then-block override any other interactions
    // note that you have to repeat the stubbing
    1 * builder.to("fred") >> builder
}
于 2013-05-28T10:17:05.440 に答える