Я заметил, что в последнем пакете nuget (FluentAssertions -Version 5.6.0) я до сих пор не вижу метода ShouldBeEquivalentTo
, который мог бы выполнять сравнение объектов без значения (ТОЛЬКО для структуры).Я могу видеть Should().BeEquivalentTo()
, но не знаю, как сделать утверждение структуры объекта, кроме значений.
Мое решение включено .Net Core 2.1
Мой код:
[Fact]
public void GetFlatTariffForOneProduct_ReturnSuccess()
{
this.Given(_ => _steps.GivenACorrelationIdHeaderIsProvided(true))
.And(_ => _steps.TheFlatTariffRawDataInDb(1))
.When(_ => _steps.WhenTheRequestExecutes(_endpoint, new EstimationRequestBuilder().FlatRateElecRequest().Build()))
.Then(_ => _steps.TheResponseCodeIs(HttpStatusCode.OK))
.And(_ => _steps.TheReturnedContentIs(new EstimationResponseBuilder().EstimateResponse(1).Build()))
.BDDfy();
}
Последний шаг вышеупомянутого называется методом ниже для утверждения объектной модели без данных.
public async Task TheReturnedContentIs<T>(T obj)
{
var responseString = await ResponseMessage.Content.ReadAsStringAsync();
var deserializeObject = JsonConvert.DeserializeObject<T>(responseString);
obj.Should().BeEquivalentTo(deserializeObject);
}
Ожидаемый ответ:
{
"attributeA": {
"attribute2": "CITIPP",
"attribute3": [
{
"attribute4": "Variable",
"attribute5": {
"attribute6": 65.5022916666667,
"attribute7": 45.407291666666673,
"attribute8": 33.454791666666679
}
},
{
"attribute4": "Fixed",
"attribute5": {
"attribute6": 21.8762916666667,
"attribute7": 89.432291666666673,
"attribute8": 90.236791666666679
}
}
]
},
"attributeB": {
"attribute2": "CITIPP",
"attribute3": [
{
"attribute4": "Variable",
"attribute5": {
"attribute6": 71.5022916666667,
"attribute7": 53.407291666666673,
"attribute8": 62.454791666666679
}
},
{
"attribute4": "Fixed",
"attribute5": {
"attribute6": 38.5022916666667,
"attribute7": 53.407291666666673,
"attribute8": 44.3684791666666679
}
}
]
}
}
С утверждением ниже фактического ответадолжен пройти.Как вы заметили структура это же не значения.Но если любое из имен attribute
отличается, утверждение должно завершиться неудачей.(например, если attributeA
изменилось на attributeX
в ответе)
Фактический ответ
{
"attributeA": {
"attribute2": "ABCD",
"attribute3": [
{
"attribute4": "Variable",
"attribute5": {
"attribute6": 71.5022916666667,
"attribute7": 53.407291666666673,
"attribute8": 62.454791666666679
}
},
{
"attribute4": "Fixed",
"attribute5": {
"attribute6": 71.5022916666667,
"attribute7": 53.407291666666673,
"attribute8": 62.454791666666679
}
}
]
},
"attributeB": {
"attribute2": "CITIPP",
"attribute3": [
{
"attribute4": "Variable",
"attribute5": {
"attribute6": 54.5022916666667,
"attribute7": 11.407291666666673,
"attribute8": 98.454791666666679
}
},
{
"attribute4": "Fixed",
"attribute5": {
"attribute6": 71.222916666667,
"attribute7": 53.33291666666673,
"attribute8": 32.454791666666679
}
}
]
}
}
Я передаю объектную модель описанному выше методу.Поэтому я ожидаю сравнить структуру объекта без значений.Причиной вышеупомянутого несостоятельности утверждения являются различия в стоимости.Структура соответствует идеально.