Как мне создать пакт / контракт, в котором указано, что необходимо проверять только наличие и тип свойств в ответе?
Я установил
Я уже сделал немного, но кажется, что проверка на стороне поставщика всегда завершалась ошибкой, если свойство модели имеет тип String (см. Нижнюю часть этого вопроса).
Могу я узнать, как это исправить?
Вот что у меня есть на данный момент:
Класс модели: Пользователь
public class User
{
public long id {get; set;}
public string name { get; set; }
public string dob { get; set; }
}
Код потребительского теста:
[Fact]
public void GetUser()
{
User user = new User();
_mockProviderService
.Given("There is a User")
.UponReceiving("A GET request to retrieve the User")
.With(new ProviderServiceRequest
{
Method = HttpVerb.Get,
Path = "/rest/user/1",
Headers = new Dictionary<string, object>
{
{ "Accept", "application/json" }
}
})
.WillRespondWith(new ProviderServiceResponse
{
Status = 200,
Headers = new Dictionary<string, object>
{
{ "Content-Type", "application/json" }
},
Body = Match.Type(user)
}); ;//NOTE: WillRespondWith call must come last as it will register the interaction
var consumer = new RestClient(_mockProviderServiceBaseUri);
//Act
var result = consumer.GetUser();
//Assert
Assert.IsType<User>(result.Result);
_mockProviderService.VerifyInteractions(); //NOTE: Verifies that interactions registered on the mock provider are called at least once
}
Код проверки провайдера:
[Fact]
public void TestProvider()
{
var config = new PactVerifierConfig
{
Outputters = new List<IOutput>
{
new XUnitOutput(_outputHelper)
},
Verbose = true,
CustomHeaders = new Dictionary<string, string>()
{
{ "Accept","application/json" }
}
};
IPactVerifier pactVerifier = new PactVerifier(config);
pactVerifier
.ServiceProvider(ProviderName, ProviderUri)
.HonoursPactWith(Consumer)
.PactUri($@"C:\Pacts\{Consumer}-{ProviderName}.json")
.Verify();
}
Когда я запускаю тест Provider, я сталкиваюсь с такой ошибкой:
Failure/Error: expect(response_body).to match_term expected_response_body, diff_options, example
...
"user": {
- "name": NilClass,
- "dob": NilClass
+ "name": String,
+ "dob": String
}
Description of differences
--------------------------------------
* Expected nil but got a String ("Damien") at $.user.name
* Expected nil but got a String ("12/04/2021") at $.user.dob
Обходной путь
Используйте AutoBogus или аналогичные инструменты для автоматической установки свойств объекта модели с правильными значениями, прежде чем он будет использован для создания пакта. Если все остальное не поможет, я бы изучил это решение.