Question

J'ai une classe simple:

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

Existe-t-il un moyen d'affirmer l'égalité de deux instances de cette classe sans implémentation de la méthode Equal (je suppose que la réflexion pourrait bien convenir ici)?Je ne veux pas implémenter Equal uniquement pour les tests).

Était-ce utile?

La solution

Voir cet extrait de la documentation officielle: https://fluentassertions.com/introduction

Vous pouvez affirmer l'égalité d'objets entiers en comparant leurs propriétés par nom. Cela fonctionne même si les types des propriétés diffèrent mais qu'une conversion intégrée existe (via la classe Convert). À titre d'exemple, considérons une entité Customer d'un modèle de domaine arbitraire et son homologue DTO CustomerDto. Vous pouvez affirmer que le DTO a les mêmes valeurs que l'entité en utilisant cette syntaxe:

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

Tant que toutes les propriétés de dto sont également disponibles sur le client et que leur valeur est égale ou convertible, l'assertion réussit. Cependant, vous pouvez exclure une propriété spécifique en utilisant une expression de propriété, comme par exemple la propriété ID:

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

Ce qui équivaut à:

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

L'inverse est également possible. Donc, si vous ne souhaitez inclure que deux propriétés spécifiques, utilisez cette syntaxe.

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

Et enfin, si vous voulez seulement comparer les propriétés des deux objets, vous pouvez utiliser la méthode SharedProperties () comme ceci:

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

Évidemment, vous pouvez enchaîner cela avec une méthode But () pour exclure certaines des propriétés partagées.

De plus, vous pouvez pousser plus loin la comparaison structurelle en incluant la propriété IncludingNestedObjects. Cela demandera à la comparaison de comparer tous les (collections de) types complexes auxquels les propriétés du sujet (dans cet exemple) font référence. Par défaut, il affirmera que les propriétés imbriquées du sujet correspondent aux propriétés imbriquées de l'objet attendu. Cependant, si vous spécifiez SharedProperties, il ne comparera que les propriétés de même nom entre les objets imbriqués. Par exemple:

dto.ShouldHave().SharedProperties().IncludingNestedObjects.EqualTo(customer);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top