【发布时间】:2016-12-29 07:49:51
【问题描述】:
我正在使用 Fluent Assertion 库作为我对一些自定义序列化代码的单元测试的一部分,并且我正在寻找一种方法来强制 ShouldBeEquivalentTo 将 null 和空列表进行比较。
基本上,我的测试看起来像:
[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);
}
然而,Deserialize 方法的特性之一是,如果输入数据中缺少集合类型,它会将反序列化类的属性设置为空列表,而不是 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);
}
【问题讨论】:
标签: c# fluent-assertions