2016-05-17 7 views
0

注入されたRestClientを持つGroovyクラスをテストしようとしています。Spock引数の一致MarkupBuilderクロージャ

class MyService { 
    def restClient 

    def put() { 
     restClient.put(
       path: "foo", 
       contentType: "XML", 
       body: { foo { bar(baz) }} 
     ) 
    } 
} 

これは手動テストでは問題ありません。

私はスポックでそれをテストしたい:これは失敗した

@TestFor(MyService) 
class MyServiceSpec extends Specification { 

    RESTClient restClient = Mock() 

    def setup() { 
     service.restClient = restClient 
    } 

    def "posts to restClient"() { 
     when: 
     service.put() 

     then: 
     1 * service.restClient.put([ 
       path: "foo", 
       contentType: "XML", 
       body: { foo { bar(baz) }} 
     ]) 
    } 
} 

:スポックが一致する引数を考慮しません。 Spockが同じ引数であることをSpockに認識させるにはどうすればいいですか?

(Grailsの2.3.11)

アップデート:私は、問題の核心は、{ foo() } == { foo() }が偽であるということだと思います。 How to assert equality of two closures

私は、Spockでクロージャをキャプチャし、クロージャからXMLを構築し、XMLオブジェクトを比較できることがわかりました。それを達成するための簡潔で読みやすい方法は何ですか?

答えて

0

あなたは "何でも"

then: 
     1 * service.restClient.put(_) 

はおそらくOK

に動作するはず一致するスポックに_(undescore演算子)を使用することができます
関連する問題