Domanda

Ho una classe semplice:

public class MyClass()
{
  public string Property1 {get;set;}
  public string Property2 {get;set;}
}

Esiste un modo per asserire due istanze di questa classe per l'uguaglianza senza implementazione di parità di metodo (immagino che la riflessione possa adattarsi bene qui)? Non voglio implementare uguale solo per i test).

È stato utile?

Soluzione

Vedi questo estratto dalla documentazione ufficiale:https://fluentassertions.com/introduction

È possibile affermare l'uguaglianza di interi oggetti confrontando le loro proprietà per nome. Questo funziona anche se i tipi di proprietà differiscono ma esiste una conversione integrata (attraverso la classe di converti). Ad esempio, considera un'entità del cliente da un modello di dominio arbitrario e la sua controparte DTO CustomerDTO. Puoi affermare che il DTO ha gli stessi valori dell'entità usando questa sintassi:

dto.ShouldHave().AllProperties().EqualTo(customer);

Finché tutte le proprietà di DTO sono disponibili anche sul cliente e il loro valore è uguale o convertibile, l'affermazione ha successo. Tuttavia, è possibile escludere una proprietà specifica utilizzando un'espressione della proprietà, ad esempio la proprietà ID:

dto.ShouldHave().AllPropertiesBut(d => d.Id).EqualTo(customer);

Che equivale a:

dto.ShouldHave().AllProperties().But(d => d.Id).EqualTo(customer);

È anche possibile il contrario. Quindi, se si desidera includere solo due proprietà specifiche, usa questa sintassi.

dto.ShouldHave().Properties(d => d.Name, d => d.Address).EqualTo(customer);

E infine, se si desidera solo confrontare le proprietà che hanno entrambi gli oggetti, è possibile utilizzare il metodo SharedProperties () come questo:

  dto.ShouldHave().SharedProperties().EqualTo(customer);

Ovviamente, puoi incatenarlo con un metodo ma () per escludere alcune delle proprietà condivise.

Inoltre, è possibile ottenere un livello di confronto strutturale ulteriormente includendo la proprietà inclusi NETRISTEDOBJECTS. Ciò istruirà il confronto a confrontare tutti i (raccolte di) tipi complessi a cui si riferiscono le proprietà del soggetto (in questo esempio). Per impostazione predefinita, affermerà che le proprietà nidificate del soggetto corrispondono alle proprietà nidificate dell'oggetto previsto. Tuttavia, se si specifica le proprietà condivise, confronterà solo le proprietà altrettanto denominate tra gli oggetti nidificati. Per esempio:

dto.ShouldHave().SharedProperties().IncludingNestedObjects.EqualTo(customer);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top