2017-04-18 7 views
0

PACT相互作用応答をフォーマットするためにPACT DSL .closeObject()を使用することができません。私はこの仕事をするための提案や、.closeObject()が意図したとおりに動作していないかどうかを尋ねていますか?私は2つの項目を持つショッピングカートを持っています。 .closeObject()を使用して2つのアイテムを使用して、期待される応答をフォーマットしようとすると、コンパイルされません。以下のコードを参照してください。コンパイルエラーは、最初に.closeObject()にあり、".stringMatcher("name","iPhone")行の後です。私はshoppingCartItemsの階層を作成する必要があります。 PACTのDSL .closeObject()の広告を出しての使用は、で、このリンクから見つけることができPACT DSL examples of using .closeObject()PACT DSL .close階層的なPACTファイルの相互作用をフォーマットするオブジェクト

private DslPart respSc6() { 
    DslPart body = new PactDslJsonBody() 
     .stringMatcher("id", "ShoppingCart_[0-9]*", "ShoppingCart_0") 
     .eachLike("shoppingCartItem")    
     .numberValue("quantity", 1) 
     .stringMatcher("state","new") 
     .object("productOffering")        
     .stringMatcher("id","IPHONE_7") 
     .stringMatcher("name","iPhone") 
     .closeObject() 
     .numberValue("quantity", 5) 
     .stringMatcher("state","new")    
     .object("productOffering")            
     .stringMatcher("id","SMSG_GLXY_S8") 
     .stringMatcher("name","Samsung_Galaxy_S8") 
     .closeObject()    
     .closeObject() 
     .closeArray(); 
    return body; 
} 

期待されるJSONレスポンスペイロード「マップセクション内の任意のキーに一致する」、ここでExpected PACT response payload with hierarchical data

+0

コンパイルエラーメッセージとは何ですか?オブジェクトを1回何回も閉じるかもしれないようですね。また、閉じるcloseArrayがありますが、どこでも配列を開始することはありません。 JSON本体文字列マッチャーを使用することをお勧めします。これは、DSLを使用してオブジェクトを作成するよりも少し簡単になるからです。 –

答えて

1

のようになります。あなたのJSONの例にマッチする修正された注釈付きコード。

private DslPart respSc6() { 
    DslPart body = new PactDslJsonBody() 
     .stringMatcher("id", "ShoppingCart_[0-9]*", "ShoppingCart_0") 
     .eachLike("shoppingCartItem") // Starts an array [1] and an object [2] (like calling .object(...)) and applies it to all items 
     .numberValue("quantity", 1) 
     .stringMatcher("state", "new") // You are using a simple string as the regex here, so it will only match 'new' 
     .object("productOffering") // Start a new object [3] 
      .stringMatcher("id", "IPHONE_7") // Again, this regex will only match 'IPHONE_7' 
      .stringMatcher("name", "iPhone") // Again, this regex will only match 'iPhone' 
     .closeObject() // Close the object started in [3] 
     .closeObject() // Close the object started in [2] 
     .closeArray(); // Close the array started in [1] 
    return body; 
    } 

.eachLikeマッチャーは、アレイ内のすべての項目に一つの定義を適用するように設計されているあなたは、shoppingCartItem配列のための2つの例のオブジェクト定義を提供する必要はありません。生成されたJSONに2つのアイテムを含めるには、2番目のパラメータを2番目のパラメータとして渡します。 .eachLike("shoppingCartItem", 2)

関連する問題