Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何检查集合是否包含满足给定条件的N个项?_Unit Testing_Fluent Assertions - Fatal编程技术网

Unit testing 如何检查集合是否包含满足给定条件的N个项?

Unit testing 如何检查集合是否包含满足给定条件的N个项?,unit-testing,fluent-assertions,Unit Testing,Fluent Assertions,该框架提供了大量的功能 为了检查给定集合是否包含满足特定条件的元素,我可以使用Should()。Contain: items.Should().Contain(item => item.Job == Job.Pilot, "because each plane has a pilot"); 我可以确保只有一个匹配元素: items.Should().ContainSingle(item => item.Job == Job.Pilot, "because each plane ha

该框架提供了大量的功能

为了检查给定集合是否包含满足特定条件的元素,我可以使用
Should()。Contain

items.Should().Contain(item => item.Job == Job.Pilot, "because each plane has a pilot");
我可以确保只有一个匹配元素:

items.Should().ContainSingle(item => item.Job == Job.Pilot, "because each plane has one pilot");
我还可以根据表达式检查所有项目(可能与顺序无关,尽管文档对此有点模糊):

如何检查给定数量的项(在枚举中没有特定位置)是否与给定条件匹配,而忽略其余的项?

我在想象这样的事情

items.Should().ContainMultiple(4, item => item.Job == Job.FlightAttendant);
甚至

items.Should().Times(4).Contain(item => item.Job == Job.FlightAttendant);
但是我在文件里找不到任何东西

我知道我可以预先筛选我的收藏,但当然,这与(合理的)选择相冲突

通过在断言中尽早使用Should(),我们可以在失败消息中包含更多信息


这在某种程度上是受支持的,还是应该放在某个功能请求中?

不幸的是,没有这样的API。@DennisDoomen:这应该是一个答案,因为你是该主题的权威来源:)那么,有没有地方可以记录此功能请求,以保持这个想法?也许会出现一些关于如何实现它的好主意,最终会有人贡献它(这里不排除我自己,只要我用流利的断言工作了一点,并且对库有了更多的了解)。@DennisDoomen:想想看,可能会出现类似于
items.Should().ContainSome(item=>item.Job==Job.FlightAttendant)的东西()HaveCount(4);
最符合Fluent断言的一般工作方式。也就是说,一个
ContainSome
方法基本上与
Contain
方法相同,但返回一个
和一个返回过滤集合的whichconstraint
。今天为特定于应用程序的类型编写了我的第一个自定义断言扩展,我现在对将来某个时候解决这个问题更有信心。是的,你的建议确实可行,但不会做深入的比较。你可以在
items.Should().Times(4).Contain(item => item.Job == Job.FlightAttendant);