Ottenere test unitari, copertura del codice e benchmark corretti significa principalmente scegliere gli strumenti giusti.
- test-framework fornisce uno sportello unico per eseguire tutti i casi di test HUnit e le proprietà QuickCheck da un unico cablaggio.
- La copertura del codice è incorporata in GHC sotto forma di strumento HPC .
- Criterion fornisce alcuni ottimi strumenti di benchmarking
Userò come esempio in esecuzione un pacchetto che ho appena iniziato ad abilitare con unit test, copertura del codice e benchmark:
http://github.com/ekmett/speculation
Puoi integrare i tuoi test e benchmark direttamente nel tuo file cabal aggiungendo sezioni per loro e mascherandoli dietro le bandiere in modo che non facciano in modo che ogni utente della tua libreria abbia accesso (e voglia usarli per se stesso ) la versione esatta degli strumenti di test che hai scelto.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Quindi, puoi dire a cabal come eseguire la tua suite di test. Poiché il test della cabala non esiste ancora, abbiamo uno studente che ci sta lavorando per l'estate del codice di quest'anno! - il miglior meccanismo che abbiamo è Ecco come utilizzare il meccanismo di user hook di cabal. Ciò significa passare a una build "personalizzata" con cabal e configurare un testHook. Un esempio di testHook che esegue un programma di test scritto con test-framework e quindi applica hpc al profilo può essere trovato qui:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
E poi puoi usare test-framework per raggruppare i test QuickCheck e HUnit in un unico programma:
http://github.com/ekmett/speculation/blob/master/Test.hs
Il file cabal fa attenzione ad attivare -fhpc per abilitare il test della copertura del codice, quindi testHook in Setup.lhs esegue manualmente hpc e scrive il suo output nella directory dist.
Per il benchmarking, la storia è un po 'più manuale, non esiste un'opzione "cabal benchmark". Potresti collegare i tuoi benchmark al tuo hook di prova, ma mi piace eseguirli a mano, poiché Criterion ha così tante opzioni grafiche di reporting. Puoi aggiungere i tuoi benchmark al file cabal come mostrato sopra, dare loro flag di compilazione separati, nasconderli dietro una bandiera cabal e quindi usare Criterion per fare tutto il lavoro pesante:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
È quindi possibile eseguire i benchmark dalla riga di comando e ottenere finestre KDE a comparsa con i risultati dei benchmark, ecc.
Dal momento che in pratica stai comunque vivendo nella cabala mentre sviluppi il codice Haskell, ha molto senso integrare la tua toolchain con esso.
Modifica : ora esiste il supporto per il test Cabal. Vedi http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
cabal bench
ora esiste anche.