Tout en travaillant sur des mises à jour de mon module Liste :: Gen , i a décidé d'ajouter une méthode et tout fonctionnait bien sur la machine Windows i était à l'époque. Cependant, lorsque j'ai déplacé le projet sur un poste de travail MAC, tous les tests de randomneur ont échoué, car malgré la même graine aléatoire, La question est donc la meilleure plate-forme croisée pour tester ces fonctions? Devrais-je surcharger la fonction Je préférerais des réponses qui incluent les techniques de base de Perl, car j'essaie de maintenir l'arbre de dépendance du module petit. P> test :: aléatoire et Test :: MockRandom semble être des suggestions de CPAN, est-ce que quelqu'un a une expérience avec ces modules? P> p> -> pick (num) code>, qui retournera une liste de dimensions code> num code> de la taille des éléments aléatoires de sa source. Pour tester cela, j'ai utilisé
srand code> pour semer le générateur de nombres aléatoires et effectué plusieurs tests du formulaire:
rand code> produisait des résultats différents. Je suppose que cela vient de différentes implémentations de C sous-jacents de
rand () code>. P>
rand code> avec le mien? Devrais-je créer des crochets aux fonctions qui utilisent
rand code> pour activer un mode "test" qui produit une sortie prédicable? Y a-t-il d'autres méthodes? P>
4 Réponses :
Je n'ai utilisé ni un. p>
On dirait que le test :: aléatoire serait un meilleur choix pour vous puisque vous n'utilisez apparemment que le hasard dans vos tests, pas dans votre code publié. Il devrait être beaucoup plus simple à utiliser. P>
Le test :: Module Mockrandom oblige la fonction RAND () pour renvoyer une séquence déterministe. P>
Vous pouvez exécuter quelques choix et vous assurer qu'ils ne renvoient pas tous la même chose. C'est le but de la fonction, après tout. P>
Je préfère simplement encapsuler la dépendance environnementale et la remplacer à des fins de test, un motif de test appelé Test Stub . Le talon de test couvre également d'autres entrées indirectes telles que le temps système et les poignées de fichier. Celles-ci devraient toutes être interprétées comme différentes formes de même problème, c'est pourquoi je pense que les solutions CPLAN à ce problème moins qu'on-super.
appliqué au domaine de numéro aléatoire, nous avons quelque chose comme: p> < PRE> XXX PRE>
Cela laisse le système sous test inchangé inchangé, à l'exception d'un refactoring, il devrait avoir de toute façon, mais fournit des points de contrôle pour injecter des données prévisibles dans le test. Dans le cas de votre problème spécifique, vous devez facturer la dépendance sur get_random_number code> ne sera pas couvert par des tests, il est donc essentiel qu'il soit écrit de manière à être correcte sur l'inspection; Un seul appel à la ressource système dépendante concerne tout ce qui devrait être là-bas. P>
rand code> out de
Pick code>, puis remplace la méthode extraite dans une version testable de
Liste :: Gen Code>.
Test :: mockobject :: s'étend code> est à peu près idéal à ce besoin. p> p>
Peut-être que la partie aléatoire n'a pas d'importance pour vos tests? P>
Les tests de passage peuvent vérifier les éléments suivants: P>
C'est essentiellement ce que vous faites déjà, puisque vous essayez de prendre Rand () de l'équation. Peut aussi bien aller tout le chemin et tester que votre fonction fait ce qu'elle dit sur l'étain. P>
Test :: MockRandom vous permet de choisir la séquence de chiffres afin que vous soyez à l'abri des différences système. C'est la façon dont je suis allé la seule fois où j'avais besoin de la production aléatoire et que je voulais le tester.