Domanda

Voglio essere in grado di confrontare i due seguenti oggetti per la somiglianza usando AutoFixture.semanticComparison:

public class Object1
{
  public int a;
}

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

Ora, quando lo faccio in questo modo:

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

Ricevo la seguente eccezione: "I seguenti membri non corrispondono: - b."

Ho scoperto che posso omettere il membro "B" come questo:

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

Tuttavia, trovo che questo sia abbastanza ingombrante, perché ogni volta che aggiungo un nuovo membro a Class Object2, devo correggere i miei test unitari (o almeno gli aiutanti del test unitario).

C'è un modo per dire "Voglio confrontarmi per la somiglianza solo per il sottoinsieme che esiste in entrambi gli oggetti"?

È stato utile?

Soluzione

Sembra che desideri confrontare due oggetti in base al intersezione delle loro proprietà. Questo non è attualmente supportato dalla classe di somiglianza. Il ragionamento è questo:

In questo momento il tipo di destinazione (nell'esempio sopra, quello sarebbe oggetto2) è il modello decisivo su cui viene eseguita la corrispondenza. Questo fornisce un bel po ' forte Dichiarazione per un'affermazione: Ogni proprietà pubblica o campo di questa classe deve essere abbinata.

Tuttavia, una dichiarazione sull'abbinamento dell'intersezione delle proprietà sarebbe molto debole dichiarazione, perché quello L'intersezione potrebbe essere vuoto. Questo potrebbe risultare Falsi negativi.

Anche se stai TDDing e segui il ciclo rosso/verde/refactor e hai visto un test unitario che fallisce con una tale intersezione di somiglianza ipotetica, i successivi refactoring potrebbero trasformare tale affermazione in un falso negativo, mentre rimuovi l'ultima proprietà o campo I due oggetti hanno in comune - e non lo noterai mai.

Tuttavia, l'autofixture è open source e tutto il resto, quindi sei il benvenuto Suggerisci questa funzione o inviare una richiesta di pull.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top