Для этого (но не в состоянии) я размышляю над свойствами ожидаемого и фактического объекта и проверяю, чтобы их значения были равны. Это работает, как и ожидалось, если их свойства являются единичными объектами, то есть не списками, массивами, IEnumerable
... Если свойство является списком какого-либо рода, тест не пройден (на Assert.AreEqual(...)
внутри цикла for
).
public void WithCorrectModel<TModelType>(TModelType expected, string error = "")
where TModelType : class
{
var actual = _result.ViewData.Model as TModelType;
Assert.IsNotNull(actual, error);
Assert.IsInstanceOfType(actual, typeof(TModelType), error);
foreach (var prop in typeof(TModelType).GetProperties())
{
Assert.AreEqual(prop.GetValue(expected, null), prop.GetValue(actual, null), error);
}
}
Если иметь дело со свойством списка, я получил бы ожидаемые результаты, если бы вместо этого использовал CollectionAssert.AreEquivalent(...)
, но это требует от меня приведения к ICollection
, что, в свою очередь, требует от меня знать перечисленный тип, чего я не (хочу).
Мне также необходимо знать, какие свойства являются типами списков, а я не знаю, как это сделать.
Итак, как мне утверждать, что два объекта произвольного типа эквивалентны ?
Примечание: я специально не хочу, чтобы они были равными , так как один исходит из моего тестируемого объекта, а другой встроен в мой тестовый класс для сравнения с.