流利的断言 - 如何在类型检查后正确链接

Posted

技术标签:

【中文标题】流利的断言 - 如何在类型检查后正确链接【英文标题】:Fluent assertions - how to properly chain after a type check 【发布时间】:2020-06-09 07:46:06 【问题描述】:

为什么我不能使用“And”属性对 FluentAssertions 执行以下操作?

SomeObject.Should()
   .BeAssignableTo<OtherObject>()
   .And
   .SomeStringProperty.Should().StartWith("whatever");

这不会编译,因为在 And 之后它不知道它是 SomeObject 类型。相反,我必须使用“Which”代替 And,我认为它用于集合,而不是单个对象。哪个版本可以编译,但语义不是很清楚

【问题讨论】:

Which 也可以用于集合或单个对象fluentassertions.com/introduction @Nkosi 该页面仅声明“......能够在作用于对象集合或对象图的断言之上链接特定断言”,因此是我的问题。我认为您可能是对的,但是一些官方文档证实了这一点,或者与使用 'Which' 不同的方式会很好 【参考方案1】:

Which 将为您提供对SomeObject 的引用,但转换为OtherObject。因此,您的示例将更改为:

SomeObject.Should()
   .BeAssignableTo<OtherObject>()
   .Which.SomeStringProperty.Should().StartWith("whatever");

【讨论】:

是的,这是真的,我在我的问题中所说的。正在寻找为什么必须使用“Which”而不是“And”以及为什么他们的文档声明“Which”用于集合和对象图 And 只返回您开始使用的断言类,并在其上定义了BeAssignableToWhich 在特定断言有意义并且有一些类型的对象要继续时可用。

以上是关于流利的断言 - 如何在类型检查后正确链接的主要内容,如果未能解决你的问题,请参考以下文章

如何使用流利断言断言集合中的所有项目?

流利的断言:XElement .Should().HaveValueContaining?

如何使用流利的断言结合集合和属性断言?

如何使用流利的断言比较列表?

如何使用流利的断言比较对象图中的嵌套列表

OR 条件的流利断言