Есть ли способ игнорировать внутренние свойства класса при выполнении команды 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
интерфейс IMemberSelectionRule:
Представляет правило, которое определяет, какие элементы субъекта-теста должны включать в себя сравнение двух объектов для структурного равенства.
Внедрение этого интерфейса позволяет сразу исключить все внутренние свойства (где свойство IsAssembly
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()));