如何用FluentAssertions按结构相等判断集合子集包含关系
问题解答
FluentAssertions 已经内置了符合你要求的集合子集等效校验方法,无需自定义SubsetBeEquivalentTo扩展。你可以直接使用BeSubsetOf方法,该方法默认采用和BeEquivalentTo完全一致的结构相等性比较规则。
对应你的测试场景,代码可以直接改写为:
var p1 = new Point(1,2); var p1_1 = new Point(1,2); var p2 = new Point(2,3); var p3 = new Point(4,5); var A = new [] { p1 }; var B = new [] { p2, p1_1}; var C = new [] { p2, p3}; // 断言通过:A的所有元素都能在B中找到结构等效的项 A.Should().BeSubsetOf(B); // 断言失败:C中不存在和p1结构等效的项 A.Should().BeSubsetOf(C);
如果需要自定义比较规则,比如忽略特定成员、自定义值匹配逻辑,也可以和BeEquivalentTo一样传入配置委托,示例如下:
// 示例:比较时忽略Point的X属性 A.Should().BeSubsetOf(B, opt => opt.Excluding(p => p.X));
内容的提问来源于stack exchange,提问作者Gabriel Guillermo
相关产品推荐
相关产品推荐

