如何使用FluentAssertions检查嵌套集合的顺序
正确使用FluentAssertions测试嵌套集合顺序的方法
你的代码问题出在使用了LINQ的Select操作符——它是延迟执行的,只会生成一个查询对象,不会实际遍历MarkSheets集合去执行里面的Should().BeInDescendingOrder断言。这就导致不管你写升序还是降序,断言根本没被触发,自然一直返回true。
下面是两种正确的写法:
方法一:使用ForEach遍历执行断言
直接遍历每个MarkSheet,对其Comments集合做顺序验证:
selectedStudent.MarkSheets.ForEach(markSheet => markSheet.Comments.Should().BeInDescendingOrder(comment => comment.CommentedTime));
方法二:使用FluentAssertions的AllSatisfy方法
利用FluentAssertions提供的集合断言方法,更贴合框架风格:
selectedStudent.MarkSheets.Should().AllSatisfy(markSheet => markSheet.Comments.Should().BeInDescendingOrder(comment => comment.CommentedTime));
这两种写法都会立即遍历所有MarkSheet,并逐一验证其Comments集合是否符合指定的顺序要求,一旦有任何一个集合不满足条件,断言就会抛出错误。
内容的提问来源于stack exchange,提问作者xcxc0
相关产品推荐
相关产品推荐

