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.
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.