Obter testes de unidade, cobertura de código e benchmarks corretos é principalmente sobre escolher as ferramentas certas.
- test-framework fornece um balcão único para executar todos os seus casos de teste HUnit e propriedades QuickCheck de um único chicote.
- A cobertura do código é integrada ao GHC na forma da ferramenta HPC .
- A Criterion fornece algumas ótimas máquinas de benchmarking
Usarei como exemplo de execução um pacote que acabei de ativar com testes de unidade, cobertura de código e benchmarks:
http://github.com/ekmett/speculation
Você pode integrar seus testes e benchmarks diretamente em seu arquivo de cabal, adicionando seções para eles, e mascarando-os atrás de sinalizadores para que eles não façam isso de forma que todos os usuários de sua biblioteca tenham acesso (e queiram usar para si próprios ) a versão exata das ferramentas de teste que você escolheu.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Então, você pode contar à cabal como executar seu conjunto de testes. Como o teste de cabala ainda não existe - temos um aluno trabalhando nisso para o verão de código deste ano! - o melhor mecanismo que temos é aqui como usar o mecanismo de gancho do usuário da cabal. Isso significa mudar para uma construção 'Custom' com cabal e configurar um testHook. Um exemplo de testHook que executa um programa de teste escrito com test-framework e, em seguida, aplica hpc ao perfil dele pode ser encontrado aqui:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
E então você pode usar o test-framework para agrupar os testes QuickCheck e HUnit em um programa:
http://github.com/ekmett/speculation/blob/master/Test.hs
O arquivo cabal tem o cuidado de ativar -fhpc para habilitar o teste de cobertura de código e, em seguida, o testHook em Setup.lhs executa manualmente o hpc e grava sua saída em seu diretório dist.
Para benchmarking, a história é um pouco mais manual, não há opção de 'benchmark cabal'. Você poderia conectar seus benchmarks em seu gancho de teste, mas eu gosto de executá-los manualmente, uma vez que o Criterion tem muitas opções de relatórios gráficos. Você pode adicionar seus benchmarks ao arquivo de cabala conforme mostrado acima, dar-lhes sinalizadores de compilação separados, ocultá-los atrás de um sinalizador de cabala e, em seguida, usar o critério para fazer todo o trabalho pesado:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
Você pode então executar seus benchmarks a partir da linha de comando e obter janelas pop-up do KDE com resultados de benchmarks, etc.
Já que, na prática, você está vivendo em cabala enquanto desenvolve o código Haskell, faz muito sentido integrar seu conjunto de ferramentas a ele.
Edit : O suporte ao teste Cabal agora existe. Consulte http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
cabal bench
agora existe também.