2017-11-17 7 views
2

Ich verwende PactNet, um eine API zu testen, die ein Array einer flexiblen Länge zurückgeben sollte.PACT .NET-Consumer-Test: flexible Länge Array

Wenn ich "myApi/items /" anrufe, sollte es eine Liste von Artikeln zurückgeben, bei denen der Verbraucher die genaue Größe nicht kennt. So sollte die Antwort wie folgt aussehen:

[ 
     { 
      "id": "1", 
      "description": "foo" 
     }, 
     { 
      "id": "2", 
      "description": "foo2" 
     }, 
     { 
      "id": "3", 
      "description": "foo3" 
     } 
    ] 

oder dieses:

[ 
     { 
      "id": "4", 
      "description": "foo4" 
     }, 
     { 
      "id": "2", 
      "description": "foo2" 
     } 
    ] 

Wie erstelle ich den Vertrag für diese Interaktion?

In der documentation ist ein Beispiel in Ruby, aber ich finde nicht das Äquivalent in C#.

Ich benutze PactNet Version 2.1.1.

Bearbeiten: Hier ist ein Beispiel wie es aussehen soll. Was ich wissen möchte, ist, wie ich erkläre, dass der Körper eine Reihe von Gegenständen mit einer flexiblen Länge enthalten sollte.

[Test] 
    public void GetAllItems() 
    { 
     //Arrange 
     _mockProviderService 
      .Given("There are items") 
      .UponReceiving("A GET request to retrieve the items") 
      .With(new ProviderServiceRequest 
      { 
       Method = HttpVerb.Get, 
       Path = "/items/", 
       Headers = new Dictionary<string, object> 
       { 
        { "Accept", "application/json" } 
       } 
      }) 
      .WillRespondWith(new ProviderServiceResponse 
      { 
       Status = 200, 
       Headers = new Dictionary<string, object> 
       { 
        { "Content-Type", "application/json; charset=utf-8" } 
       }, 
       Body = // array of items with some attributes 
         // (somthing like: {"id": "2", "description": "foo"}) 
         // with flexible length 
      }); 

     var consumer = new ItemApiClient(_mockProviderServiceBaseUri); 

     //Act 
     var result = consumer.GetItems(); 

     //Assert 
     Assert.AreEqual(true, result.Count > 0); 

     _mockProviderService.VerifyInteractions(); 

     data.Dispose(); 
    } 

Antwort

3

Klingt, als ob Sie nach dem MinTypeMatcher suchen.

Der Körperteil etwas wie folgt aussehen würde:

Body = Match.MinType(new { id: "1", description: "foo" }, 1) 
+0

Thank you! Das ist genau das, wonach ich gesucht habe. –