Obtenir les bons tests unitaires, la couverture de code et les tests de performance consiste principalement à choisir les bons outils.
- test-framework fournit un guichet unique pour exécuter tous vos cas de test HUnit et propriétés QuickCheck à partir d'un seul faisceau.
- La couverture de code est intégrée dans GHC sous la forme de l' outil HPC .
- Criterion fournit de très bonnes machines d'analyse comparative
J'utiliserai comme exemple en cours d'exécution un package que je viens de commencer à activer avec les tests unitaires, la couverture de code et les benchmarks:
http://github.com/ekmett/speculation
Vous pouvez intégrer vos tests et benchmarks directement dans votre fichier cabal en leur ajoutant des sections et en les masquant derrière des indicateurs afin qu'ils ne le fassent pas pour que chaque utilisateur de votre bibliothèque ait accès à (et veuille l'utiliser pour lui-même) ) la version exacte des outils de test que vous avez choisis.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Ensuite, vous pouvez dire à Cabal comment exécuter votre suite de tests. Comme le test cabal n'existe pas encore, nous avons un étudiant qui travaille dessus pour l'été de code de cette année! - le meilleur mécanisme que nous ayons est Voici comment utiliser le mécanisme de crochet utilisateur de cabal. Cela signifie passer à une version `` personnalisée '' avec cabal et configurer un testHook. Un exemple de testHook qui exécute un programme de test écrit avec test-framework, puis applique hpc au profil, peut être trouvé ici:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
Et puis, vous pouvez utiliser le framework de test pour regrouper les tests QuickCheck et HUnit dans un seul programme:
http://github.com/ekmett/speculation/blob/master/Test.hs
Le fichier cabal doit activer -fhpc pour activer le test de couverture de code, puis le testHook dans Setup.lhs exécute manuellement hpc et écrit sa sortie dans votre répertoire dist.
Pour l'analyse comparative, l'histoire est un peu plus manuelle, il n'y a pas d'option de «référence cabale». Vous pouvez câbler vos benchmarks dans votre crochet de test, mais j'aime les exécuter à la main, car Criterion a tellement d'options de rapports graphiques. Vous pouvez ajouter vos benchmarks au fichier cabal comme indiqué ci-dessus, leur donner des drapeaux de compilation séparés, les cacher derrière un drapeau cabal, puis utiliser Criterion pour faire tout le travail:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
Vous pouvez ensuite exécuter vos benchmarks à partir de la ligne de commande et obtenir des fenêtres contextuelles KDE avec des résultats de benchmark, etc.
Étant donné que dans la pratique, vous vivez de toute façon dans la cabale tout en développant du code Haskell, il est très logique d'y intégrer votre chaîne d'outils.
Edit : le support de test Cabal existe maintenant. Voir http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
cabal bench
maintenant existe aussi.