Игнорировать внутренние свойства в ShouldBeEquivalentTo

2

Есть ли способ игнорировать внутренние свойства класса при выполнении команды 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 внутреннего свойства и настройка этого для всех этих свойств будет утомительной.

Теги:
tdd
fluent-assertions

1 ответ

2
Лучший ответ

В библиотеке 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()));
  • 0
    Отлично работает, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню