Właściwe wykonanie testów jednostkowych, pokrycia kodu i testów porównawczych polega głównie na wyborze odpowiednich narzędzi.
- test-framework zapewnia kompleksową obsługę wszystkich przypadków testowych HUnit i właściwości QuickCheck z jednej wiązki.
- Pokrycie kodu jest wbudowane w GHC w postaci narzędzia HPC .
- Criterion zapewnia całkiem niezłą maszynę do testów porównawczych
Jako działający przykład użyję pakietu, który właśnie zacząłem włączać z testami jednostkowymi, pokryciem kodu i testami porównawczymi:
http://github.com/ekmett/speculation
Możesz zintegrować swoje testy i testy porównawcze bezpośrednio w pliku cabal, dodając dla nich sekcje i maskując je za flagami, aby nie sprawiały, że każdy użytkownik Twojej biblioteki musi mieć dostęp do (i chce używać dla siebie ) dokładną wersję wybranych narzędzi testowych.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Następnie możesz powiedzieć Cabal o tym, jak uruchomić zestaw testów. Ponieważ test Cabal jeszcze nie istnieje - mamy studenta pracującego nad nim na tegoroczne lato kodu! - najlepszy mechanizm jaki mamy to Oto jak używać mechanizmu haka użytkownika Cabal. Oznacza to przejście na kompilację „niestandardową” z Cabal i skonfigurowanie testHook. Przykład elementu testHook, który uruchamia program testowy napisany za pomocą platformy testowej, a następnie stosuje hpc do profilu, można znaleźć tutaj:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
Następnie możesz użyć test-framework, aby połączyć testy QuickCheck i HUnit w jeden program:
http://github.com/ekmett/speculation/blob/master/Test.hs
Znajdujący się tam plik cabal ostrożnie włącza opcję -fhpc, aby umożliwić testowanie pokrycia kodu, a następnie testHook w pliku Setup.lhs ręcznie uruchamia hpc i zapisuje wyniki w katalogu dist.
Jeśli chodzi o testy porównawcze, historia jest nieco bardziej ręczna, nie ma opcji „benchmarku kabały”. Możesz podłączyć swoje testy porównawcze do haka testowego, ale ja lubię uruchamiać je ręcznie, ponieważ Criterion ma tak wiele opcji raportowania graficznego. Możesz dodać swoje benchmarki do pliku cabal, jak pokazano powyżej, nadać im osobne flagi kompilacji, ukryć je za flagą cabal, a następnie użyć Criterion, aby wykonać całą ciężką pracę:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
Następnie możesz uruchomić testy porównawcze z wiersza poleceń i wyświetlić wyskakujące okna KDE z wynikami testów itp.
Ponieważ w praktyce i tak żyjesz w kabale podczas tworzenia kodu Haskell, sensowne jest zintegrowanie z nim łańcucha narzędzi.
Edycja : wsparcie dla testów Cabal teraz istnieje. Zobacz http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
cabal bench
teraz istnieje również.