2009-01-29 6 views
1

J'essaie d'écrire un test unitaire pour un module qui me donnera une liste aléatoire de nombres selon certains critères.Comment tester pour parfois échoue?

Le test particulier que j'écris est un remaniement de la séquence d'origine. Je teste que

  • Les séquences sont la même longueur
  • Les séquences ont les mêmes valeurs
  • Les séquences ne sont pas dans le même ordre

Le problème est que, parfois, les séquences sont dans le même ordre. Quelle serait la meilleure façon de faire face à cela? J'utilise NUnit (mais je pourrais utiliser un autre framework de test si cela peut aider).

Répondre

6

Comment générez-vous vos nombres aléatoires? Je commencerais par contrôler la graine de votre générateur de nombres aléatoires, et redéfinir votre 3ème test comme étant "les séquences ne sont pas dans le même ordre, quand on utilise une graine différente".

2

Quel serait le meilleur moyen de traiter avec ceci?

Il n'y a vraiment pas moyen de "traiter" jusqu'à ce que les exigences soient raffermies. Soit il faut que le shuffle s'assure que les séquences sont en désordre (dans ce cas, le shuffle n'est pas vraiment "aléatoire"), soit il est normal qu'elles soient dans le même ordre. S'il est acceptable que le shuffle renvoie quelque chose dans le même ordre, vous pouvez écrire un test qui vérifiera la distribution des résultats sur un grand nombre d'exécutions par rapport à une distribution attendue, mais c'est à peu près aussi spécifique que possible. " résultats. S'il n'est pas acceptable que le shuffle renvoie le même ordre, vous pouvez exécuter la fonction un certain nombre de fois pour vous assurer que le shuffle ne renverra pas le même ordre, donc le même principe général s'applique. Utilisez un grand nombre de passages et mesurez les résultats par rapport aux tolérances acceptées.

Espérons que cela aide!

5
  • Le test particulier que j'écris est un remaniement de la séquence d'origine.
  • Les séquences ne sont pas dans le même ordre

Ces exigences ne correspondent pas. Si vous réalisez vraiment un remaniement aléatoire, il est clair que la liste peut revenir inchangée.

Il existe cependant une option. Lorsque vous créez votre générateur de nombres aléatoires, vous pouvez transmettre une "graine". Si vous passez toujours la même graine, vous devriez toujours obtenir la même réponse. Maintenant que vous avez retiré le hasard de votre fonction aléatoire, vous pouvez le tester facilement.

Questions connexes