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
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
.
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.
- 1. Haskell Cabal QuickCheck Integration
- 2. HUnit/QuickCheck z ciągłą integracją
- 3. jak korzystać z instrumentów podczas testowania?
- 4. Mechanizm automatycznego budowania i testowania języków dla wielu projektów
- 5. Skrypt Bash do automatycznego testowania wyjścia programu - C
- 6. "window.angular nie jest zdefiniowana." podczas używania kątomierza do automatycznego testowania?
- 7. Cabal: cabal configure failed
- 8. Błąd Cabal Mac OS (leopard śniegu) - ld: nieznana opcja: -no_pie
- 9. Jak zwiększyć wydajność automatycznego różnicowania?
- 10. Pierwsze Cabal do pracy z GHC 6.12.1
- 11. Jak korzystać z Anta do automatycznego zmieniania nazwy wyjściowego pliku APK?
- 12. Jak używać preg_match do testowania przestrzeni?
- 13. Jak korzystać z dwóch różnych kompilatorów dla różnych celów w pliku .cabal?
- 14. Jak używać runhaskell z cabal-dev?
- 15. Jak korzystać z PHPUnit do testowania funkcji, jeśli ta funkcja ma zabić PHP?
- 16. Cabal testowa nie zostanie wydrukowana wyjście wykonywalny
- 17. Uzyskiwanie osadzonego wideo z YouTube do automatycznego odtwarzania i pętli
- 18. Urządzenie do testowania jednostek i LiveData
- 19. Budowanie z flagami wykonawczymi przy użyciu cabal i ghc
- 20. Dlaczego mój zestaw testowy HUnit przechodzi, gdy moje testy zakończą się niepowodzeniem?
- 21. Podłączanie narzędzia do budowania w Cabal (Haskell)
- 22. Jak korzystać z modułów z js_of_ocaml?
- 23. Logowanie podczas testowania z RSpec i Authlogic
- 24. Cabal Aktualizuj i opakowania Błędy montażowe
- 25. Niezależny podzbiór pakietów cabal set
- 26. Jak korzystać z LibreOffice Calc i Python?
- 27. Biblioteka JAVA do wideokonferencji i jak korzystać z libjitsi?
- 28. Jak korzystać z P: grow i PrimFaces do strony
- 29. Jak korzystać z FluentValidation.AspNetCore i FluentValidation.MVC6?
- 30. Dlaczego cabal instaluje ponownie pakiety w .cabal/lib
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
@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
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 –