Потребительский тест PACT .NET: гибкий массив длин
Я использую pactNet для тестирования API, который должен возвращать массив гибкой длины.
Если я назову "myApi/items/", он должен вернуть список предметов, где потребитель не знает точного размера. Так что ответ должен выглядеть так:
[
{
"id": "1",
"description": "foo"
},
{
"id": "2",
"description": "foo2"
},
{
"id": "3",
"description": "foo3"
}
]
или это:
[
{
"id": "4",
"description": "foo4"
},
{
"id": "2",
"description": "foo2"
}
]
Как мне создать контракт для этого взаимодействия?
В документации приведен пример в Ruby, но я не могу найти эквивалент в C#.
Я использую pactNet версии 2.1.1.
Изменить: Вот пример, как это должно выглядеть. Я хочу знать, как мне объявить, что тело должно содержать массив элементов с гибкой длиной.
[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();
}
1 ответ
Похоже, вы ищете MinTypeMatcher.
Часть тела будет выглядеть примерно так:
Body = Match.MinType(new { id: "1", description: "foo" }, 1)
Для сценария вложенного массива, такого как запрос @SlimSjakie, просто повторите Match.MinType для свойства, имеющего массив. Например, следующий объект Person имеет свойство Address в виде массива.
Person = Match.MinType(new
{
FirstName = Match.Type("string"),
LastName = Match.Type("string"),
Address = Match.MinType(new
{
Street = Match.Type("string"),
Town = Match.Type("string"),
State = Match.Type("string"),
Postcode = Match.Type("string"),
Country = Match.Type("string")
}, 1)
}, 1)
Итак, что, если я хочу сопоставить тип объекта, у которого есть свойство, которое является списком или массивом?
если вы выполните Match.Type(new myType()) и количество элементов в массиве или свойстве списка не совсем то же самое, тест завершится неудачно. Вы увидите такую ошибку:
Description of differences
--------------------------------------
* Actual array is too long and should not contain a Hash at $.data.itinerary[2]