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

5
在FluentAssertions中,您可以使用不同的格式提出各种要求。
x.Should().BeEquivalentTo(y);
x.ShouldBeEquivalentTo(y);

两者都是有效的断言。

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

你也可以断言

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

在这里,And 是一个属性而不是一个方法。为什么 AndShould 不应该是相同类型的元素(方法/属性)呢?
简而言之,FluentAssertions 中将 Should 设计成方法而不是属性是否有合理的原因?

如果您尝试使用属性,我认为链接可能无法正常工作。换句话说,方法链接技术需要方法。 - David Tansey
1
@DavidTansey 但是他们正在使用 And 属性进行链接。 - Luke Willis
2
链式编程仅需要返回一个对象。您可以使用方法或属性进行链式编程。 - James Curran
2个回答

11

Should()是一个扩展方法,被添加到x类中。你只能添加扩展方法--C#没有扩展属性

AndNotBeNull()返回的类的属性。在那里我们可以控制这个类,并且可以添加真正的属性。


3
Should() 是一个方法,因为C#语言的限制。它是一个扩展方法; 一种在FluentAssertions库中定义的方法,可用于调用任何类型(因此x.Should()) - 即使该类的原始代码没有实现该方法。
您不能实现扩展属性,因此Should必须是一个方法。
该方法返回FluentAssertions中定义的对象,NotBeNull()也是如此,因此这些对象可以包含相关/有用/有意义的属性。
简而言之:有效的原因是这是唯一可用的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接