Как вы можете элегантно утверждать следующий вид эквивалентности между двумя объектами .NET (в идеале, используя библиотеку Fluent Assertions)?
Два объекта структурно эквивалентны if:
- оба объекта имеют одинаковый (во время выполнения) тип, а
- публичные свойства обоих объектов (рекурсивно) структурно эквивалентны .
Обратите внимание, что subject.Should().BeEquivalentTo(expectation)
не работает, поскольку BeEquivalentTo
не проверяет равенство типов.Например, если у нас есть два класса A
и B
каждый с одним свойством object X { get; set; }
, то два объекта
new A { X = new B { X = new A() }}
и
new B { X = new A { X = new B() }}
будут считатьсяэквивалентен BeEquivalentTo
, даже если их типы, типы их свойств и подвойств не совпадают и, следовательно, не являются структурно эквивалентными по приведенному выше определению.