142 votes

L'Assert.Equals de NUnit lance l'exception "Assert.Equals ne doit pas être utilisé pour les assertions".

J'ai récemment essayé d'utiliser la méthode Assert.Equals() lors de l'écriture d'un nouveau test NUnit. Lors de l'exécution de cette méthode, un AssertionException déclarant que Assert.Equals should not be used for Assertions. C'est un peu déconcertant à première vue. Que se passe-t-il ici ?

0 votes

Pouvez-vous nous donner un peu de contexte, par exemple le code particulier dans lequel il se trouve ? Quels types d'objets avez-vous comparés, etc. ?

9 votes

Désolé, mais j'ai déjà trouvé la réponse à cette question. Je l'ai juste posée afin de pouvoir poster la réponse pour la postérité. Le contexte n'est pas vraiment important, comme vous le verrez en lisant la réponse. J'espère que cette réponse pourra être facilement trouvée grâce à une recherche sur le web concernant le message d'exception.

223voto

Odrade Points 2121

Assert est une classe statique héritant de System.Object, comme toutes les classes le font implicitement en C#. System.Object implémente la méthode suivante :

static bool Equals(object a, object b)

Les méthodes d'Assert destinées à la comparaison d'égalité sont les suivantes Assert.AreEqual() des méthodes. Par conséquent, l'appel à la méthode Object.Equals() à travers la classe Assert dans un test unitaire est certainement une erreur. Afin de prévenir cette erreur et d'éviter toute confusion, les développeurs de NUnit ont intentionnellement caché les éléments suivants Object.Equals dans la classe Assert avec une implémentation qui lève une exception. Voici cette implémentation :

/// <summary>
 /// The Equals method throws an AssertionException. This is done
 /// to make sure there is no mistake by calling this function.
 /// </summary>
 /// <param name="a"></param>
 /// <param name="b"></param>
 [EditorBrowsable(EditorBrowsableState.Never)]
 public static new bool Equals(object a, object b)
 {
     // TODO: This should probably be InvalidOperationException
     throw new AssertionException("Assert.Equals should not be used for Assertions");
 }

Bien sûr, le message d'exception lui-même est déroutant, mais il vous permet au moins de savoir ce que vous avez fait. quelque chose erronée.

19 votes

Le message est confus, mais en le tapant dans Google, vous aboutissez à cette réponse et tout va bien. Merci Odrade.

33 votes

Les développeurs de NUnit pourraient modifier le message pour dire "...use Assert.AreEqual()".

0 votes

Pourquoi ne pas avoir rendu la méthode Equals privée ?

24voto

Doug Points 2296

Tldr ;

Assert.AreEqual(a, b); // <-- Compares a, b

pas :

Assert.Equals(a, b); // <-- Irrelevant equality operator on Assert itself

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