2013-02-23 23 views
8

Próbowałem użyć cabal-install jako sposobu na zbudowanie i, co ważniejsze, przetestować moje projekty haskell, trochę podobne do sposobu, w jaki Maven jest używany w projektach Java, głównie dlatego, że wydaje się, że być dobrym sposobem na integrację z Jenkinsem lub PW, i wydaje się być bardzo niezawodny w tym sensie, że nie potrzebujesz środowiska programistycznego i tak dalej, aby sprawdzić i potwierdzić, czy kod jest kompilowany i poprawny albo nie.Haskell Cabal QuickCheck Integration

W każdym razie używam do tego QuickCheck i HUnit. W innym poście here na wymianie stosu znalazłem ładny sposób na integrację HUnit i cabal, używając testu funkcji w Distribution.TestSuite.HUnit, aby utworzyć odsłoniętą tablicę testów w moim module testowym. Prace.

Starałem się zrobić ten sam styl skonfigurować z QuickCheck,

import qualified Distribution.TestSuite.QuickCheck2 as CabalQuickCheck 

    alwaysFalseOneArg::Int->(Int,Int) 
    alwaysFalseOneArg x = (x,x) 

    quickCheckPropOneArg = \s->let (a,b)=alwaysFalseOneArg s in a==b && a/=b 

    cabalQCTest = CabalQuickCheck.test "test" quickCheckPropOneArg 

    tests=cabalQCTest:[] 

chcę zobaczyć ten test nie powiedzie się.

Plik cabal, który mam działa z konfiguracją HUnit, z testami HUnit działającymi i kończącymi się niepowodzeniem lub niezawierającymi, tak jak powinny. Jeśli jednak używam tego samego zestawu do testów szybkiego sprawdzania, cabal mówi mi, że rzeczywiście znalazł pakiet testowy, ale nie ma w nim testów. Próbowałem podejście, które jest wymienione na site Distribution.TestSuite.QuickCheck2, ale tam nie wydają się wspomnieć, jak wystawiać test i wydaje się, że nie uda się zrobić tego uruchomienia. Teraz jestem trochę zagubiony, mogę uruchomić te testy Quickcheck z samym checkem, ale nie z Cabal i chciałbym, aby to było w stanie szybko zweryfikować wszystkie moje testy i kod i użyć go w Jenkins lub tak. Czy ktoś ma pomysł?

Próbowałem podać wszystkie informacje, które uważam za niezbędne bez zbytniego komplikowania rzeczy, więc nie wysłałem kompletnego pliku cabal i tak dalej, jeśli byłoby to konieczne, oczywiście to zrobię. Znalazłem sporo podobnych postów, ale większość z nich sprowadza się do użycia czegoś innego niż szczegółowego - 0.9, co byłoby szkoda, ponieważ wydaje się działać całkiem nieźle z HUnit jako konfiguracją i chciałbym użyć zarówno HUnit, jak i QuickCheck w ten sam sposób, najlepiej eksponując jedną tablicę testów zawierającą zarówno testy HUnit, jak i QuickCheck.

Kasper

+0

Oto możliwe przykład: https://github.com/patperry/hs-monte-carlo/blob/master/monte-carlo.cabal i test z głównego wywołującego QC: https: // github .pl/patperry/hs-monte-carlo/blob/master/tests/Main.hs – gliptak

+1

Kontynuacja komentarza gliptaka - chciałbym zbadać użycie frameworka testowego; Uważam, że jest to trochę wygodniejsze. [Dodatkowy] (https://github.com/isturdy/q/blob/master/tests/Tests.hs) [przykład] (https://github.com/isturdy/q/blob/master/tests/Data /Queue/RealtimeTests.hs). – isturdy

Odpowiedz

2

zgadzam się z isturdy: na pewno będę mieć go na test-framework + test-framework-quickcheck2. Sprawdź, this example, jak używać ich razem w projekcie. Zwróć uwagę na właściwości o nazwie prop_*.

Można również sprawdzić projekt haskell-minecraft-tool, aby zobaczyć, jak wygląda wynik testu. Przeprowadź testy z

cabal configure --enable-tests && cabal build && cabal test 

zajrzeć do pliku .cabal tutaj, aby zobaczyć, jakie są wymagane pakiety. Mianowicie są to: test-framework, test-framework-quickcheck2, .