2012-08-08 9 views
14

Walczyłem z Cabalem przez większą część dnia, starając się, aby jego automatyczne funkcje testowania działały z HUnit. Przeczytałem dokumentację here i here i mam skonfigurowaną sekcję Test-Suite tak, jak to pokazuje, ale gdy próbuję budować pakiet za pomocą cabal build Cabal mówi, że jedynym obsługiwanym typem Test-Suite jest exitcode-stdio-1.0. Co daje?Jak korzystać z HUnit i Cabal do automatycznego testowania?

Odpowiedz

17

Tło

Więc tutaj jest wiele, dokumentacja na Cabal miejscu jest „przyszłość dokumentacja”, to znaczy, nie wszystkie z tych funkcji są realizowane i jeszcze wydana. Cabal-install 0.14.0 jest dostarczany z interfejsem detailed-0.9, który jest wersją zgodną z tym, co podano w dokumentacji (detailed-1.0), ale nie napotkałem żadnych problemów związanych z tym jeszcze. Jeśli masz wersję Haskella w wersji 2011.4, która jest dostarczana z cabal-install 0.10.2, nie będziesz mógł korzystać z interfejsu detailed-0.9. Będziesz musiał dokonać aktualizacji do Haskell Platform 2012.2, która jest dostarczana z cabal-install 0.14.0. Możesz też po prostu zaktualizować cabal-install osobno, co zrobiłem, ponieważ na platformie Fedora 17 platforma Haskell jest tylko w wersji 2011.4.

Instalacja

W dokumentacji here zobaczysz przykład jak używać interfejsu detailed-0.9 z QuickCheck. Wymienia niektóre pakiety, które mają interfejsy do HUnit, QuickCheck1 i QuickCheck2, ale tylko pakiet dla QuickCheck2 jest dostępny w hakowaniu. Jeśli chcesz pakiety na pozostałe frameworki, musisz użyć darcs (VCS), aby pobrać je z lokalizacji this. Polecenie, które chcesz uruchomić dla interfejsu HUnit, jest następujące: darcs get http://community.haskell.org/~ttuegel/cabal-test-hunit/. Być może będziesz musiał dostosować plik .cabal, aby go zbudować, w szczególności opiera się na ghc 3.* i cabal 1.10. Zmieniłem to na moje wersje (ghc 4.* i cabal 1.14) i wszystko dobrze.

Testowanie

Po interfejs zbudowany trzeba zrobić kilka rzeczy w module testowym tak Cabal można go uruchomić. W szczególności musisz zaimportować zarówno Distribution.TestSuite, jak i Distribution.TestSuite.HUnit. Następnie musisz przekonwertować swoje testy HUnit na testy Cabal, korzystając z funkcji udostępnianej w interfejsie HUnit. Oto odpowiednie wiersze kodu:

import qualified Distribution.TestSuite as Cabal 
import qualified Distribution.TestSuite.HUnit as CabalHUnit 

tests = map (\(x,y) -> CabalHUnit.test x y) [("Login tests", loginTests)] 

To wszystko! Powinieneś być w stanie uruchomić cabal configure --enable-tests && cabal build && cabal test i zobaczyć, czy testy jednostek przebiegają pomyślnie (lub nie).

Edit
edytowane wyjaśnić, że interfejs detailed-0.9 jest wliczone w cabal zainstalować 0.14.0, nie detailed-1.0.

+0

Rozwiązanie nie działa z HP 2012.2. 'cabal --version' pokazuje odpowiednio' 0.14.0' i '1.14.0', ale' cabal configure --ableable tests' nadal mówi "typy testów to: exitcode-stdio-1.0, szczegółowe-0.9". Więc oficjalne '1.14.0' jest nadal bez' detailed-1.0'. – nponeccop

+0

@nponeccop Przykro mi, że moje rozwiązanie było mylące. Zmieniłem to, by było bardziej zrozumiałe. Żeby było jasne, interfejs "detail-1.0" nie jest jeszcze dostępny, więc będziesz musiał użyć interfejsu "Detailed-0.9". Nie natknąłem się na nic, co powinno znajdować się w interfejsie 1.0, a nie na interfejsie 0.9, ale na YMMV. – Dwilson

+3

Dla każdego, kto przyjeżdża tutaj w wyszukiwarce Google: zwróć uwagę, że znacznie prostszym rozwiązaniem jest użycie typu testu 'exitcode-stdio-1.0' zamiast' szczegółowych'. Oto działający przykład, który łączy "exitcode-stdio-1.0" i "HUnit": https://gist.github.com/23Skidoo/8019225 –

1

Chociaż odpowiedź Dwilsona jest dobra, detailed nie jest obecnie dobrze obsługiwany. Zintegruj HUnit z cabal przy użyciu exitcode-stdio-1.0 i Test.Framework.

Wypisze wszystkie pomyślnie zakończone i nieudane testy do stdout, a także zakończy się niepowodzeniem, jeśli testy zakończą się niepowodzeniem. Zobacz mój gist.

Powiązane problemy