Fluent Assertions集合断言:能否配置错误消息显示缺失/多余项名称?
解决Fluent Assertions集合断言错误消息显示详情的问题
直接配置.BeEquivalentTo()显示差异项
Fluent Assertions本身支持通过配置让集合断言的错误消息展示具体差异,无需切换到Except的写法。你可以通过调整断言配置选项,强制输出缺失或多余的具体项:
示例代码(不关心元素顺序)
如果只要求两个集合包含的元素完全一致、不考虑顺序,可添加IncludeMismatchedValues()配置:
list2.Should().BeEquivalentTo(list1, options => options .IncludeMismatchedValues()); // 关键配置,强制显示具体不匹配项
示例代码(关心元素顺序)
若需要严格匹配元素顺序,使用.Equal()方法时默认就会输出具体差异:
list2.Should().Equal(list1);
此时错误消息会直接列出哪几个元素在list1中存在但list2缺失,或是list2多了哪些元素。
自定义个性化错误消息
如果需要更贴合业务场景的提示,可结合BecauseOf()和WithMessage(),用内置占位符插入差异详情:
list2.Should().BeEquivalentTo(list1) .Because("两个列表的Name集合必须完全一致") .WithMessage("列表校验失败,具体差异:{0}", ctx => ctx.DifferenceString);
关于默认消息只显示数量差的原因
当集合元素数量较多时,Fluent Assertions会默认折叠长列表输出,仅展示数量差异。通过上述IncludeMismatchedValues()配置,即可强制展开显示具体的不匹配内容。
内容的提问来源于stack exchange,提问作者gakera
相关产品推荐
相关产品推荐

