- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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);
}
最佳答案
根据上述丹尼斯提供的信息,我能够通过以下实际代码解决此问题:
public class ClassWithList
{
public string Id { get; set; }
public List<string> Items { get; set; }
public List<ClassWithList> Nested { get; set; }
}
[TestClass]
public class Test
{
[TestMethod]
public void Should_compare_null_to_empty()
{
ClassWithList one = new ClassWithList { Id = "ten", Items = null, Nested = new List<ClassWithList> { new ClassWithList { Id = "a" } } };
ClassWithList two = new ClassWithList { Id = "ten", Items = new List<string>(), Nested = new List<ClassWithList> { new ClassWithList { Id = "a", Items = new List<string>(), Nested = new List<ClassWithList> { } } } };
two.ShouldBeEquivalentTo(one, opt => opt
.Using<IEnumerable>(CheckList)
.When(info => typeof(IEnumerable).IsAssignableFrom(info.CompileTimeType)));
}
private void CheckList(IAssertionContext<IEnumerable> a)
{
if (a.Expectation == null)
{
a.Subject.Should().BeEmpty();
}
else
{
a.Subject.ShouldBeEquivalentTo(a.Expectation, opt => opt
.Using<IEnumerable>(CheckList)
.When(info => typeof(IEnumerable).IsAssignableFrom(info.CompileTimeType)));
}
}
}
关于c# - FluentAssertions - 如何使 ShouldBeEquivalentTo 比较空和 null 是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084977/
有没有办法在执行 ShouldBeEquivalentTo 时忽略类的内部属性? 例如,在下面的类中,我想从对象图比较中排除 MetaData 属性。 public class SomeObject
我想做一个将数据库模型映射到dto的映射器测试 在数据库模型中有 class Order { long Id } 但是在Dto上同一个字段被命名为 class OrderDto { l
我正在用 C# 编写单元测试。 ShouldBeEquivalentTo 对正面案例有意义,但对于负面案例你用什么> 我还没有找到类似 ShouldNotBeEquivalentTo 的东西。 最佳答
使用 FluentAssertions: 我可以使用 ShouldBeEquivalentTo 排除单个属性。 x.ShouldBeEquivalentTo(y, opts => opts.Exclu
我有 2 个字典,我希望内容不会相同,因为字典包含不同类型的值。但是下面的测试通过了 [Scenario] public void DictionariesWithDifferentTypesShou
我有一个测试来验证方法的集合输出。此测试变体通过了: [TestMethod, TestCategory("BVT")] public void TheStatusesAreRetur
我正在尝试使用 Nspec。我已按照以下说明进行操作:http://nspec.org/ 创建类库项目 Nuget:安装包 nspec Nuget:安装包 FluentAssertions 创建一个类
我有以下 DTO: public class Dto { public DateTime Date { get; set; } } 我正在尝试根据 FA wiki 使用此语法覆盖属性的比较:
在 Fluent Assertions 中比较具有 DateTime 属性的对象时,有时会出现毫秒的轻微不匹配,从而导致比较失败。我们绕过它的方法是像这样设置比较选项: actual.ShouldBe
在我的 NUnit/FluentAssertions 测试中,我使用以下代码将从我的系统返回的复杂对象与引用对象进行比较: response.ShouldBeEquivalentTo(refe
我在单元测试中使用流畅的断言,但是使用 ShouldBeEquivalentTo , ShouldAllBeEquivalentTo , 和 BeEquivalentTo不清楚。 例如;以下所有语句都
谁能总结一下它们之间的区别和使用范围? 我阅读了 SO 文章, ShouldBeEquivalientTo() :ShouldBeEquivalentTo() 旨在用于比较复杂的对象图,而不是 .NE
我正在使用 Fluent Assertion 库作为我对一些自定义序列化代码进行单元测试的一部分,我正在寻找一种方法来强制 ShouldBeEquivalentTo 将 null 和空列表比较为相等。
我有一个类,我们称它为 Foo,它是一个值类型,因此会覆盖 Equals/GetHashCode() 方法。在一个单独的测试夹具中,我想断言 Foo 上的所有属性都已正确设置,而不仅仅是用于相等的属性
我是一名优秀的程序员,十分优秀!