Haskell tests de flux de travail
Je viens de commencer une nouvelle Haskell projet et je voulais un bon test de flux de travail depuis le début. Il semble que Haskell a beaucoup d'excellents unique et des outils de test et de nombreuses façons différentes de les intégrer.
J'ai regardé dans:
Qui semblent tous fonctionnent très bien dans leurs domaines, mais je suis à la recherche d'une approche globale de la tester et je me demandais ce qui a bien fonctionné pour d'autres personnes.
Vous devez vous connecter pour publier un commentaire.
Obtenir les tests unitaires, la couverture du code, et des critères de droite est la plupart du temps de choisir les bons outils.
Je vais utiliser comme un exemple, un paquet que je viens de commencer l'activation de l'unité de test, la couverture du code, et de repères:
http://github.com/ekmett/speculation
Vous pouvez intégrer vos tests et de benchmarks directement dans votre cabale fichier par l'ajout de sections pour eux, et de les masquer derrière des drapeaux afin de ne pas faire en sorte que tous les utilisateurs de votre bibliothèque pour avoir accès à (et que vous voulez utiliser pour eux-mêmes) la version exacte des outils de test que vous avez choisi.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Ensuite, vous pouvez dire cabale sur la façon d'exécuter des suites de tests.
Comme cabale test n'existe pas encore-nous avons un étudiant qui travaille sur elle pour l'été de cette année de code! -- le meilleur mécanisme que nous avons estVoici comment utiliser la cabale de l'utilisateur mécanisme de crochet. Cela signifie que le passage à une "Coutume" de construire avec de la cabale et de la configuration d'un testHook. Un exemple de testHook qui exécute un programme de test écrit avec test-cadre, et applique ensuite hpc de profil peut être trouvé ici:http://github.com/ekmett/speculation/blob/master/Setup.lhs
Et puis vous pouvez utiliser le test-cadre pour s'emmitoufler QuickCheck et HUnit tests en un seul programme:
http://github.com/ekmett/speculation/blob/master/Test.hs
La cabale fichier, il est prudent de tourner sur fhpc pour permettre la couverture de code de test, puis les testHook dans le programme d'Installation.lhs manuellement fonctionne hpc et écrit le résultat dans votre dist dir.
Pour l'analyse comparative, l'histoire est un peu plus manuel, il n'y a pas de "cabale de référence" option. Vous pourriez fil de tes repères dans votre test de crochet, mais je tiens à les exécuter à la main, car le Critère a de nombreux rapports graphiques options. Vous pouvez ajouter des repères de la cabale fichier comme indiqué ci-dessus, leur donner de la compilation séparée des drapeaux, les masquer derrière une cabale drapeau, puis utiliser le Critère de faire tout le levage lourd:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
Vous pouvez ensuite exécuter vos repères à partir de la ligne de commande et d'obtenir le pop-up de KDE, windows avec les résultats d'un benchmark, etc.
Puisque, dans la pratique, vous vivez dans la cabale, de toute façon, pendant le développement du code Haskell, il fait beaucoup de sens pour l'intégration de vos outils avec elle.
Modifier: Cabale test à l'appui maintenant, n'existe pas. Voir http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
cabal bench
existe en tant que bien.cabal test
etcabal bench
, mélangeHUnit
,doctest
, etquickcheck
en fonction des tests aveccriterion
repères. Le code de laspeculation
est antérieure àcabal test
etcabal bench
.L'approche est avocat dans RWH ch 11 et dans XMonad est d'environ:
Une fois que vos grands invariants sont établis par QuickCheck, vous pouvez commencer à refactoring, l'évolution de ces tests dans le type d'invariants.
Pratiques pour soutenir vos efforts:
La test-cadre package est vraiment génial. Vous pouvez facilement intégrer HUnit et QuickCheck tests, et d'obtenir les fichiers exécutables exécuter spécifié suites seulement, en fonction des options de ligne de commande, avec de multiples cibles de sortie.
De test et de profilage sont différents des bêtes bien. Pour le profilage j'avais crée un exécutable qui souligne juste la partie que vous voulez de profil, et juste en regardant attentivement les résultats de profilage construit et exécute (avec -prof-automatique-tout pour la compilation et +RTS-p pour une exécution drapeau).
Pour les tests, je m'appuie sur HUnit et QuickCheck propriétés et l'utilisation de la Haskell Framework De Test de recueillir tous les tests unitaires et tous les QuickCheck automatiquement des propriétés.
Disclaimer: je suis le développeur principal du Haskell Framework de Test.