在FluentAssertions中,为什么应该是一个方法而不是一个属性

本文关键字:一个 方法 属性 FluentAssertions 为什么 | 更新日期: 2023-09-27 18:18:25

在FluentAssertions中,你可以用不同的格式做出不同的声明。

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

都是有效的断言。

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

你也可以断言

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

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

TL;博士是否有一个合理的原因背后的设计选择使Should的方法在FluentAssertions而不是一个属性?

在FluentAssertions中,为什么应该是一个方法而不是一个属性

Should()是添加到x类上的扩展方法。你只能添加扩展方法——c#没有扩展属性

AndNotBeNull()返回的任何类的属性。在这里,我们可以控制类,并可以为它添加真正的属性。

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

你不能实现扩展属性,所以Should必须是一个方法。

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

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