2010-09-20 9 views
0

Donc je suis ici en train de jouer avec PEX, ça semble être une bonne idée.PEX: Comment testeriez-vous une méthode d'égalité dans pex?

Cependant, j'ai quelques problèmes, tels que je n'ai aucun moyen de tester une méthode égale en utilisant des tests d'unité de paramètre.

Peut-être qu'il n'y a aucun moyen, c'est peut-être une technique que je n'ai pas encore compris.

Quelqu'un doit avoir une bonne idée. Si je faisais ceci dans le moq par exemple, je ferais en sorte que toutes les propriétés sur les deux objets soient lues et ferions les comparaisons moi-même pour les vérifier. Cependant, je ne vois pas comment utiliser cette approche avec des tests paramétrés. Le problème est que je dois vérifier que les appels de méthode sont faits et que les propriétés sont définies/lues dans ma logique métier. Je n'ai aucune idée de comment faire cela en PEX et il n'y a pas vraiment une énorme quantité de documentation là-bas.

Répondre

1

Il y a quelques propriétés de base que vous pouvez vérifier qui sont liés à la définition mathématique de l'égalité:

  • n'a pas l'accident: a == b jette jamais une exception
  • symétrique: (a == b) == (b == a)
  • réflexif: (a == a) == true
  • transitivité: (a == b) & & (b == c) ==> a == c
  • donné Func f, a == b ==> f (a) == f (b)

Tous ces éléments sont agréables mais ne vous garantissent certainement pas que l'égalité fonctionne. mais un certain point, vous aurez spécifier comme assertions ce que l'égalité signifie pour vous. Par exemple, les valeurs de la propriété P doivent être égales, etc ... En fin de compte, vous obtiendrez une deuxième spécification de l'égalité en tant que tests.

Les choses deviennent plus interressant lorsque vous investiate la relation avec GetHashCode:

  • a.GetHashCode() + b.GetHashCode() ==> a = b
  • idempotent:! A.GetHashCode () == a.GetHashCode()
+0

Réponse intéressante. J'avais mal formulé la question mais vous avez réussi à donner une réponse très utile, je n'avais pas envisagé de tester ces propriétés. GetHashCode est également sur ma liste;) –

+0

v réponse tardive mais en fait probablement la bonne approche sur la réflexion –