在FluentAssertions中,您可以以各种格式提出各种声明。
x.Should().BeEquivalentTo(y);
x.ShouldBeEquivalentTo(y);
都是有效的断言。
为什么Should
是方法而不是属性?我还没有看到Should
采用参数的任何示例,所以在我看来它可能很容易成为一个属性。
你也可以断言
x.Should().NotBeNull().And.BeEquivalentTo(y);
此处,And
是属性而不是方法。不应该And
和Should
每个都是相同类型的元素(方法/属性)吗?
TL; DR
在FluentAssertions而不是属性中使Should
方法成为设计选择背后是否有正当理由?
答案 0 :(得分:11)
Should()
是一种添加到x
类的扩展方法。您只能添加扩展程序 - C#没有扩展程序属性。
And
是任何类NotBeNull()
返回的属性。我们可以控制该类,并可以为其添加实际属性。
答案 1 :(得分:3)
Should()
是一种方法,因为C#语言的局限性。这是一种扩展方法;在FluentAssertions
库中定义的可用于调用任何类型的方法(因此x.Should()
) - 即使该类的原始代码未实现该方法。
您无法实现扩展程序属性,因此Should
必须是一种方法。
该方法返回FluentAssertions
中定义的对象,NotBeNull()
也是如此,因此这些对象可以包含相关/有用/有意义的属性。
简而言之:正确的理由是它是唯一可用的选择。