首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在FluentAssertions中使用`Which`?

如何在FluentAssertions中使用`Which`?
EN

Stack Overflow用户
提问于 2021-05-07 02:05:04
回答 1查看 181关注 0票数 0

我正在使用流畅的断言,并且我有这样的测试:

代码语言:javascript
复制
            result.Should().NotBeNull();
            result.Link.Should().Equals("https://someinvoiceurl.com");

它工作得很好,但是当我尝试这个

代码语言:javascript
复制
            result.Should().NotBeNull().Which.Link.Equals("https://someinvoiceurl.com");

我得到了这个错误

代码语言:javascript
复制
'AndConstraint<ObjectAssertions>' does not contain a definition for 'Which' and no accessible extension method 'Which' accepting a first argument of type 'AndConstraint<ObjectAssertions>' could be found (are you missing a using directive or an assembly reference?)

我哪里做错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-07 02:14:47

这里的问题是.NotBeNull()不是泛型的(它是ObjectAssertions而不是GenericObjectAssertions上的扩展),所以它不能将类型信息链接到以后的调用。

我个人认为这是库设计中的一个缺陷,但通过用.BeOfType<T>()替换.NotBeNull()很容易解决这个问题:

代码语言:javascript
复制
result.Should().BeOfType<ThingWithLink>() // assertion fails if `result` is null
    .Which.Link.Should().Be("https://someinvoiceurl.com");

当然,如果您经常在ThingWithLink类型上进行断言,那么编写一个自定义断言可能是值得的,这样您就可以“更加流畅”:

代码语言:javascript
复制
result.Should().BeOfType<ThingWithLink>()
    .And.HaveLink("https://someinvoiceurl.com");

如果你需要更特别的东西,你可以随时使用.BeEquivalentTo()来做结构比较:

代码语言:javascript
复制
result.Should().NotBeNull()
    .And.BeEquivalentTo(new { Link = "https://someinvoiceurl.com" }); // ignores all members on `result` except for `result.Link`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67423715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档