2 votes

Ignorer les propriétés internes dans ShouldBeEquivalentTo

Existe-t-il un moyen d'ignorer les propriétés internes d'une classe lors de l'opération ShouldBeEquivalentTo ?

Par exemple, dans la classe ci-dessous, je veux exclure la propriété MetaData de la comparaison du graphique des objets.

public class SomeObject 
{
    Public string SomeString { get; set; }
    internal MetaData MetaData { get; set; }
}

Je préférerais ne pas utiliser

someObject.ShouldBeEquivalentTo(someOtherObject, options =>     
    options.Excluding(info => info.SelectedMemberPath == "MetaData")

Parce qu'il se peut que j'aie plus d'une propriété interne et que la mise en place de ce système pour toutes ces propriétés serait fastidieuse.

2voto

Serhii Shushliapin Points 1127

Il y a le IMemberSelectionRule dans la bibliothèque FluentAssertions :

Représente une règle qui définit les membres du sujet sous test à inclure lors de la comparaison de deux objets pour l'égalité structurelle.

L'implémentation de cette interface permet d'exclure toutes les interne à la fois (où IsAssembly la propriété est 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));
    }
  }

La règle peut maintenant être utilisée dans les tests unitaires :

  someObject.ShouldBeEquivalentTo(someOtherObject, options => options.Using(
    new AllExceptNonPublicPropertiesSelectionRule()));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X