在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
是一个属性而不是一个方法。不应该And
和Should
每个是相同类型的元素(方法/属性)?
TL;博士是否有一个合理的原因背后的设计选择使Should
的方法在FluentAssertions而不是一个属性?
Should()
是添加到x
类上的扩展方法。你只能添加扩展方法——c#没有扩展属性。
And
是NotBeNull()
返回的任何类的属性。在这里,我们可以控制类,并可以为它添加真正的属性。
Should()
是一个方法,因为c#语言的限制。这是一个扩展方法;一个在FluentAssertions
库中定义的方法,可以在任何类型上调用(因此是x.Should()
)——即使类的原始代码没有实现该方法。
你不能实现扩展属性,所以Should
必须是一个方法。
该方法返回FluentAssertions
和NotBeNull()
中定义的对象,因此这些对象可以包含相关/有用/有意义的属性。
简而言之:合理的理由是它是唯一可用的选择。