在FluentAssertions中,为什么应该使用方法而不是属性?

时间:2014-08-18 15:04:18

标签: c# .net fluent-assertions

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

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

都是有效的断言。

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

你也可以断言

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

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

TL; DR 在FluentAssertions而不是属性中使Should方法成为设计选择背后是否有正当理由?

2 个答案:

答案 0 :(得分:11)

Should()是一种添加到x类的扩展方法。您只能添加扩展程序 - C#没有扩展程序属性

And是任何类NotBeNull()返回的属性。我们可以控制该类,并可以为其添加实际属性。

答案 1 :(得分:3)

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

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

该方法返回FluentAssertions中定义的对象,NotBeNull()也是如此,因此这些对象可以包含相关/有用/有意义的属性。

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