Как я могу сказать, что следует игнорировать конкретный тип коллекций при сравнении объектов?C#

Место общения программистов C#
Anonymous
Как я могу сказать, что следует игнорировать конкретный тип коллекций при сравнении объектов?

Сообщение Anonymous »

Я использую Shoudly (в качестве бесплатной замены FluentAssertions), но мне не удалось заставить его сравнивать объекты, содержащие коллекции.
У меня есть такая модель:

Код: Выделить всё

public record GetOrdersResponse
{
   public required IReadOnlyCollection Orders { get; init; }
}
...и такой тест:

Код: Выделить всё

    [Theory, AutoData]
   public async Task GetOrdersAsync_ReturnsExpectedResponse
   (
       GetOrdersResponse expected
   )
   {
       ...
       // Assert
       result.ShouldBeEquivalentTo(expected);
   }
...и это не получается:

Код: Выделить всё

        Expected value to be
    System.Collections.ObjectModel.ReadOnlyCollection`1[Order]
        but was
    System.Collections.Generic.List`1[Order]
Таким образом, он жалуется на то, что конкретный тип объекта — List вместо ReadOnlyCollection, а не на то, что содержимое отличается. Учитывая, что оба этих типа соответствуют объявленному типу объекта, мне все равно! Но я не могу найти способ заставить его игнорировать тип.
Единственный способ заставить его "работать" до сих пор - это изменить объявленный тип свойства модели на List, что абсолютно ужасно. Я не хочу разрушать свою модель, чтобы она соответствовала тестам.
Или я могу выполнить сравнение свойств по свойствам, вызвав ToArray() как для фактического, так и для ожидаемого массива, но это невозможно масштабировать по мере добавления новых свойств.
Есть ли способ заставить его игнорировать конкретный тип?

Вернуться в «C#»