当前位置: 首页 > 编程语言 > C#

如何在FluentAssertions中使用Exclude作为集合中的属性?分享

时间:2023-04-10 12:25:39 C#

FluentAssertions如何在集合中使用Exclude作为属性?我有两个班级:publicclassClassA{publicint?ID{获取;设置;}公共IEnumerable儿童{get;设置;}}公共类ClassB{公共int?ID{获取;设置;}公共字符串名称{get;set;}}我想使用流畅的断言来与ClassA实例进行比较。但我想忽略ID(因为ID将在保存后分配)。我知道我可以这样做:expectedA.ShouldBeEquivalentTo(actualA,options=>options.Excluding(x=>x.PropertyPath=="Children[0].ID"));对于集合中的每个ClassB,我显然可以重复这个。但是,我正在寻找一种排除所有ID的方法(而不是为每个元素执行一个排除)。我读过这个问题,但如果我删除[0]索引器,断言就会失败。是否可以?关于什么?expected.ShouldBeEquivalentTo(actualA,options=>options.Excluding(su=>(su.RuntimeType==typeof(ClassB))&&(su.PropertyPath.EndsWith("Id")));`或者你可以在propertypath做一个正则表达式匹配expected.ShouldBeEquivalentTo(actualA,options=>options.Excluding(su=>(Regex.IsMatch("Children[.+].ID"));我其实喜欢最后一个,但是正则表达式的东西让它有点难以阅读。也许我应该使用扩展ISubjectInfo的方法来匹配具有通配符模式的路径,这样你就可以这样做:expected.ShouldBeEquivalentTo(actualA,options=>options.Excluding(su=>su.PathMatches("Children[*].ID")));我刚刚遇到了类似的问题,最新版本的FluentAssertions改变了一些东西。我的对象包含其他对象的字典。字典中的对象包含我要排除的其他对象。我的场景是测试Json序列化,我忽略了一些属性。这对我有用:gotA.ShouldBeEquivalentTo(expectedB,config=>config.Excluding(ctx=>ctx.SelectedMemberInfo.MemberType==typeof(Venue)).Excluding(ctx=>ctx.SelectedMemberInfo.MemberType==typeof(Exhibit)).Excluding(ctx=>ctx.SelectedMemberInfo.MemberType==typeof(Content)).Excluding(ctx=>ctx.SelectedMemberInfo.MemberType==typeof(Survey)).Excluding(ctx=>ctx.SelectedMemberInfo.MemberType==类型(媒体)));我花了一段时间才弄清楚如何做到这一点,但它确实有效!简单的方法是直接在集合上设置断言并将其从ClassA等效断言中排除:expectedA.ShouldBeEquivalentTo(expectedB,o=>o.Excluding(s=>s.PropertyInfo.Name=="Children"));expectedA.Children.ShouldBeEquivalentTo(expectedB.Children,o=>o.Excluding(s=>s.PropertyInfo.Name="Id"));最简单的方法是:expected.ShouldBeEquivalentTo(actual,config=>config.ExcludingMissingMembers());基于DennisDoomen的回答中的RegEx匹配想法,我能够让它按预期工作。ShouldBeEquivalentTo(actualA,options=>options.Excluding(su=>(Regex.IsMatch(su.SelectedMemberPath,"Children\[.+\].ID"));与DennisAnswer的区别:通过su.SelectedMemberPath,双反斜杠转义方括号以上是C#学习教程:如何在FluentAssertions中使用Exclude作为集合中的属性?全部分享如果内容对您有用,需要了解更多C#学习教程,希望您多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击有权联系管理员删除,如有转载请注明出处:

最新推荐
猜你喜欢