5

在 FluentAssertions 中,您可以以各种格式提出各种声明。

x.Should().BeEquivalentTo(y);
x.ShouldBeEquivalentTo(y);

都是有效的断言。

为什么是Should方法而不是属性?我还没有看到任何Should带有参数的例子,所以在我看来它很容易成为一个属性。

你也可以断言

x.Should().NotBeNull().And.BeEquivalentTo(y);

这里,And是属性而不是方法。不应该AndShould每个都是相同类型的元素(方法/属性)?

TL;DRShould在 FluentAssertions 中创建方法而不是属性 的设计选择背后是否有正当理由?

4

2 回答 2

11

Should()是添加到x. 您只能添加扩展方法——C# 没有扩展属性

And是任何类NotBeNull()返回的属性。在那里我们可以控制类,并且可以向它添加真实的属性。

于 2014-08-18T15:08:25.503 回答
3

Should()是一种方法,因为 C# 语言的限制。这是一种扩展方法;一种在库中定义的方法,FluentAssertions可用于调用任何类型(因此x.Should())——即使该类的原始代码没有实现该方法。

您无法实现扩展属性,因此Should必须是一种方法。

该方法返回一个在 中定义的对象FluentAssertions,就像 一样NotBeNull(),因此这些对象可以包含相关/有用/有意义的属性。

简而言之:正当理由是它是唯一可用的选择。

于 2014-08-18T15:09:22.930 回答