Я использую библиотеку Fluent Assertion как часть моих модульных тестов для некоторого кода пользовательского кода сериализации, и я ищу способ заставить ShouldBeEquivalent сравнить с равным нулевым и пустым списком ,FluentAssertions - как make ShouldBeEquivalentTo сравнить пустые и нулевые как равные
В основном, мои тесты выглядеть так:
[Test]
public void Should_be_xxx()
{
ClassWithList one = new ClassWithList { Id = "ten", Items = null };
string serialized = Serialize(one);
ClassWithList two = Deserialize(serialized);
two.ShouldBeEquivalentTo(one);
}
Однако одна из особенностей методы десериализации является то, что если тип коллекции отсутствует во входных данных, он устанавливает свойство на десериализованном классе в пустой список, а не в null. Итак, очень упрощенно, я получаю ситуацию, когда в примере два, Items = new List<string>
, а не null.
Очевидно, я мог бы установить one.Items = new List<string>()
перед сравнением, но на самом деле у меня есть большое количество сложных объектов домена, которые я утверждаю в этих методах, и я ищу общее решение. Иными словами, кто-нибудь знает, как сделать следующий тест проход:
public class ClassWithList
{
public string Id { get; set; }
public List<string> Items { get; set; }
}
[Test]
public void Should_be_xxx()
{
ClassWithList one = new ClassWithList { Id = "ten", Items = null };
ClassWithList two = new ClassWithList { Id = "ten", Items = new List<string>() };
two.ShouldBeEquivalentTo(one);
}
Чтобы поместить это иначе, я ищу, чтобы применить следующий тест для всех коллекций класса X как часть сравнения эквивалентности :
if (subject.Items == null)
{
expected.Items.Should().BeEmpty();
}
else
{
expected.Items.Should().BeEquivalentTo(subject.Items);
}