在执行 ShouldBeEquivalentTo 时,有没有办法忽略类的内部属性?
例如,在下面的类中,我想从对象图比较中排除 MetaData 属性。
public class SomeObject
{
Public string SomeString { get; set; }
internal MetaData MetaData { get; set; }
}
我宁愿不使用
someObject.ShouldBeEquivalentTo(someOtherObject, options =>
options.Excluding(info => info.SelectedMemberPath == "MetaData")
因为我可能有超过 1 个内部属性,并且为所有这些属性设置此属性会很乏味。
有的是IMemberSelectionRule https://github.com/dennisdoomen/FluentAssertions/blob/77be654857b4ba28e75709a97a481b24fe966dcc/Src/Core/Equivalency/IMemberSelectionRule.csFluentAssertions 库中的接口:
表示一个规则,定义在比较两个对象的结构相等性时要包含测试对象的哪些成员。
实现此接口允许排除所有internal立即属性(其中IsAssembly https://msdn.microsoft.com/en-us/library/system.reflection.methodbase.isassembly(v=vs.110).aspx财产是true
):
internal class AllExceptNonPublicPropertiesSelectionRule : IMemberSelectionRule
{
public bool IncludesMembers
{
get { return false; }
}
public IEnumerable<SelectedMemberInfo> SelectMembers(
IEnumerable<SelectedMemberInfo> selectedMembers,
ISubjectInfo context,
IEquivalencyAssertionOptions config)
{
return selectedMembers.Except(
config.GetSubjectType(context)
.GetNonPrivateProperties()
.Where(p => p.GetMethod.IsAssembly)
.Select(SelectedMemberInfo.Create));
}
}
现在可以在单元测试中使用该规则:
someObject.ShouldBeEquivalentTo(someOtherObject, options => options.Using(
new AllExceptNonPublicPropertiesSelectionRule()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)