Question

Je veux être en mesure de comparer les deux objets suivants pour la ressemblance en utilisant AutoFixture.SemanticComparison:

public class Object1
{
  public int a;
}

public class Object2
{
  public int a;
  public int b;
}

Maintenant, quand je le fais de cette façon:

var o1 = new Object1 { a = 1 };
var o2 = new Object2 { a = 1, b = 2};
o1.AsSource().OfLikeness<Object2>().ShouldEqual(o2);

je reçois l'exception suivante: "Les membres suivants ne correspondent: -. B"

Je trouve que je peux omettre le membre « b » comme ceci:

var o1 = new Object1 { a = 1 };
var o2 = new Object2 { a = 1, b = 2};
o1.AsSource().OfLikeness<Object2>().Without(object2 => object2.b).ShouldEqual(o2);

Cependant, je trouve que cela est assez lourd, car chaque fois que j'ajouter un nouveau membre à la classe Object2, je dois corriger mes tests unitaires (ou au moins des aides de tests unitaires).

Est-il possible de dire « Je veux comparer à la ressemblance juste pour le sous-ensemble qui existe dans les deux objets »?

Était-ce utile?

La solution

On dirait que vous souhaitez comparer deux objets en fonction de la intersection de leurs propriétés. Ce ne sont pas actuellement pris en charge par la classe Ressemblance. Le raisonnement est le suivant:

En ce moment, le type de destination (dans l'exemple ci-dessus, ce serait Object2) est le modèle décisif sur lequel la correspondance est établie. Cela donne un tout à fait forte Déclaration pour une affirmation. tous les biens publics ou sur le terrain de cette classe doit correspondre

Cependant, une déclaration au sujet correspondant à l'intersection des propriétés serait très faible déclaration, parce que intersection peut être vide . Cela pourrait se traduire par Faux Négatifs.

Même si vous êtes TDDing et après le cycle / Rouge Vert / Refactor et vous avez vu un test unitaire à défaut d'une telle hypothétique intersection Ressemblance, refactorisations ultérieurs pourrait transformer une telle affirmation dans un négatif faux, comme vous supprimez le dernier propriété ou sur le terrain les deux objets ont en commun -. et vous ne remarquerez

Cependant, AutoFixture est open source et tout, donc vous êtes les bienvenus à suggérer cette fonctionnalité ou envoyer un demande traction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top