2013-02-23 20 views
8

Ho cercato di usare cabal-install come un modo per costruire e, cosa più importante, testare i miei progetti di haskell, un po 'come il modo in cui Maven viene utilizzato nei progetti Java, principalmente perché sembra essere un buon modo per integrarsi in Jenkins o a ci o così, e sembra essere molto affidabile, nel senso che non è necessario un ambiente di sviluppo e così su set up per verificare e confermare se il codice è compilato e corretto o no.Haskell Cabal QuickCheck Integration

Ad ogni modo, sto usando QuickCheck e HUnit per questo. In un altro post here sullo stack exchange ho trovato un buon modo per integrare HUnit e cabal, utilizzando il test funzionale in Distribution.TestSuite.HUnit per creare un array di test esposto nel mio modulo di test. Lavori.

ho cercato di fare lo stesso stile di set up con 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:[] 

voglio vedere questo test sicuro.

Il file cabal che ho funziona con HUnit impostato, con test HUnit in esecuzione e in errore o non in errore come dovrebbero. Tuttavia, se utilizzo lo stesso set up per eseguire test di controllo rapido, cabal mi dice che in effetti ha trovato una suite di test, ma non ci sono test in esso. Ho provato l'approccio menzionato su site di Distribution.TestSuite.QuickCheck2, ma non sembrano menzionare come esporre il test e non riesco a farlo funzionare. Sono un po 'in difficoltà ora, posso eseguire questi test di controllo rapido con quickcheck stesso ma non con la cabal e mi piacerebbe che fosse in grado di verificare rapidamente tutti i miei test e il codice e usarlo in un Jenkins o così. Qualcuno un'idea?

Ho provato a fornire tutte le informazioni che ritengo necessarie senza complicare eccessivamente le cose, quindi non ho pubblicato il file completo della cabala e così via, se ciò fosse necessario, naturalmente lo farò. Ho trovato parecchi post simili, ma la maggior parte di essi si riduce a usare qualcos'altro oltre a 0.9 dettagliato che sarebbe un peccato perché sembra funzionare abbastanza bene con HUnit come set up e vorrei usare sia HUnit che QuickCheck allo stesso modo, naturalmente, esponendo preferibilmente un array di test contenente test HUnit e QuickCheck allo stesso modo.

Kasper

+0

Ecco un possibile esempio: https://github.com/patperry/hs-monte-carlo/blob/master/monte-carlo.cabal e un test con principale di controllo di qualità di chiamata: https: // GitHub .com/patperry/hs-monte-carlo/blob/master/tests/Main.hs – gliptak

+1

Seguendo il commento di gliptak - vorrei investigare usando il framework test; Lo trovo un po 'più conveniente. Un [ulteriore] (https://github.com/isturdy/q/blob/master/tests/Tests.hs) [esempio] (https://github.com/isturdy/q/blob/master/tests/Data /Queue/RealtimeTests.hs). – isturdy

risposta

2

sono d'accordo con isturdy: avrei sicuramente avere un andare a test-framework + test-framework-quickcheck2. Scopri this example su come usarli insieme in un progetto. Si noti le proprietà denominate prop_*.

È anche possibile controllare il progetto haskell-minecraft-tool per vedere come appare l'output di test. Eseguire i test con

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

un'occhiata al file .cabal qui per vedere quali sono necessari pacchetti. Vale a dire questi sono test-framework, test-framework-quickcheck2, QuickCheck.