C# Fluents断言:递归排除字段
例如,我有简单的课程C# Fluents断言:递归排除字段,c#,fluent-assertions,C#,Fluent Assertions,例如,我有简单的课程 class Person { public string Name; public string LastName; public Person Parent; public static int IdCounter = 0; public int Id; public Person(string name, string lastName, Person parent) { Name = name; LastN
class Person {
public string Name;
public string LastName;
public Person Parent;
public static int IdCounter = 0;
public int Id;
public Person(string name, string lastName, Person parent) {
Name = name;
LastName = lastName;
Parent = parent;
Id = IdCounter++;
}
}
在测试中,我想将我从某处得到的人与预期的人进行比较,如下所示:
var expectedPerson=新人(“约翰”、“盖尔基”、新人(“谢尔顿”、“库珀”、空”);
var actualPerson=PersonGenerator.GetCurrentPerson();
我想递归地比较它们,不包括Id字段,这对父母也意味着什么
actualPerson.Should().beeEquivalento(预期人员,(选项)=>
{
选项。排除(t=>t.Id);
});
但ofc这只适用于一级人员,当FluentAssertion可以进入递归(文档中有10个级别)时,我如何排除父级及其父级和e.t.c的Id字段?
在这个例子中,这似乎很不合理,但我需要确切地做到这一点,如何做到这一点?要递归地排除一个成员,您必须使用模式匹配要排除的成员的路径 例如,您想排除
- 身份证
- 父.Id
- Parent.Parent.Id
Id
结尾,因此您可以使用
排除(ctx=>ctx.SelectedMemberPath.EndsWith(“Id”))
var expectedPerson=新人(“约翰”、“盖尔基”、新人(“谢尔顿”、“库珀”、空”);
var actualPerson=新人(“约翰”、“盖勒基”、新人(“谢尔顿”、“库珀”、空”);
actualPerson.Should().beeEquivalento(expectedPerson,options=>
选项。排除(ctx=>ctx.SelectedMemberPath.EndsWith(“Id”));
请注意,这是纯字符串匹配。
例如,如果另一个成员具有要包括的Id
属性,则可以使用这种方式确保它仅与根Id或任何Parent.Id匹配
Regex.IsMatch(ctx.SelectedMemberPath, @"^(Parent\.)*Id$")
要递归地排除成员,您必须使用与要排除的成员的路径匹配的模式 例如,您想排除
- 身份证
- 父.Id
- Parent.Parent.Id
Id
结尾,因此您可以使用
排除(ctx=>ctx.SelectedMemberPath.EndsWith(“Id”))
var expectedPerson=新人(“约翰”、“盖尔基”、新人(“谢尔顿”、“库珀”、空”);
var actualPerson=新人(“约翰”、“盖勒基”、新人(“谢尔顿”、“库珀”、空”);
actualPerson.Should().beeEquivalento(expectedPerson,options=>
选项。排除(ctx=>ctx.SelectedMemberPath.EndsWith(“Id”));
请注意,这是纯字符串匹配。
例如,如果另一个成员具有要包括的Id
属性,则可以使用这种方式确保它仅与根Id或任何Parent.Id匹配
Regex.IsMatch(ctx.SelectedMemberPath, @"^(Parent\.)*Id$")
你期望的结果是什么?你困惑的问题你的预期结果是什么?你的问题令人困惑,谢谢!顺便问一下,这样做是否正确和正常?查看
SelectedMemberPath
的排除
重载是进行递归匹配的最佳可用方法。见例。regex示例是我能想到的与Person.Id
完全匹配的最佳方法,除此之外没有其他方法。谢谢!顺便问一下,这样做是否正确和正常?查看SelectedMemberPath
的排除
重载是进行递归匹配的最佳可用方法。见例。regex示例是我能想到的最好的方法,它可以精确地匹配Person.Id
,而无需其他任何东西。