2012-08-08 13 views
14

Ho litigato con Cabal per una buona parte della giornata cercando di far funzionare le sue funzioni di test automatico con HUnit. Ho letto la documentazione here e here, e ho configurato la mia sezione Test-Suite come mostra, ma ogni volta che provo a compilare il pacchetto usando cabal build Cabal dice che l'unico tipo di Test-Suite supportato è exitcode-stdio-1.0. Cosa dà?Come utilizzare HUnit e Cabal per eseguire test automatici?

risposta

17

Sfondo

Quindi, ecco l'affare, la documentazione sul sito cabala è "documentazione di futuro", vale a dire, non tutte quelle caratteristiche sono implementate e ancora rilasciato. Cabal-install 0.14.0 viene fornito con l'interfaccia detailed-0.9, che è una versione dietro ciò che è specificato nella documentazione (detailed-1.0), ma non ho ancora riscontrato alcun problema relativo a questo. Se si dispone della piattaforma Haskell versione 2011.4 fornita con cabal-install 0.10.2, non sarà possibile utilizzare l'interfaccia detailed-0.9. È necessario eseguire l'aggiornamento a Haskell Platform 2012.2 che viene fornito con cabal-install 0.14.0. Potresti anche aggiornare la cabal-install separatamente, che è quello che ho fatto perché su Fedora 17 la piattaforma Haskell è solo su 2011.4.

installazione

Nella documentazione here vedrete un esempio di come utilizzare l'interfaccia detailed-0.9 con QuickCheck. Menziona alcuni pacchetti che hanno interfacce per HUnit, QuickCheck1 e QuickCheck2, ma solo il pacchetto per QuickCheck2 è disponibile su hackage. Se vuoi i pacchetti per il resto dei framework dovrai usare darcs (a VCS) per scaricarli dalla posizione this. Il comando che desideri eseguire per l'interfaccia HUnit è questo: darcs get http://community.haskell.org/~ttuegel/cabal-test-hunit/. Potrebbe essere necessario regolare il file .cabal per poterlo creare, in particolare si basa su ghc 3.* e cabal 1.10. Ho cambiato questo alle mie versioni (ghc 4.* e cabal 1.14) e ha funzionato bene.

Testing

Una volta che avete l'interfaccia integrata è necessario fare alcune cose nel vostro modulo di test in modo Cabal possibile eseguirlo. In particolare dovrai importare sia Distribution.TestSuite e Distribution.TestSuite.HUnit. Dopodiché dovrai convertire i test HUnit in test della cabala, utilizzando una funzione fornita nell'interfaccia HUnit. Ecco le righe di codice rilevanti:

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

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

Questo è tutto! Dovresti essere in grado di eseguire cabal configure --enable-tests && cabal build && cabal test e vedere i test delle tue unità passare (o fallire).

Modifica
A cura di chiarire che l'interfaccia detailed-0.9 è incluso nella cabala-install 0.14.0, non detailed-1.0.

+0

La soluzione non funziona con HP 2012.2. 'cabal --version' mostra' 0.14.0' e '1.14.0' rispettivamente, ma' configure cabal --enable-tests' dice ancora "i tipi di test sono: exitcode-stdio-1.0, detailed-0.9". Quindi il '1.14.0' ufficiale è ancora senza' detailed-1.0'. – nponeccop

+0

@nponeccop Mi dispiace che la mia soluzione fosse fuorviante. L'ho modificato per essere più chiaro. Per essere chiari, l'interfaccia "detailed-1.0" non è ancora disponibile, quindi dovrai usare l'interfaccia "detailed-0.9". Non ho incontrato nulla finora che dovrebbe essere nell'interfaccia 1.0 e non nell'interfaccia 0.9, ma YMMV. – Dwilson

+3

Per chiunque arrivi qui tramite la ricerca Google: si noti che una soluzione molto più semplice è usare il tipo di test 'exitcode-stdio-1.0' invece di' detailed'. Ecco un esempio funzionante che combina 'exitcode-stdio-1.0' e' HUnit': https://gist.github.com/23Skidoo/8019225 –

1

Sebbene la risposta di Dwilson sia buona, lo detailed non è attualmente supportato correttamente. È possibile integrare HUnit con cabal utilizzando exitcode-stdio-1.0 e Test.Framework.

Invia tutti i test riusciti e falliti a stdout e fallisce la costruzione se i test falliscono. Vedi il mio gist.

Problemi correlati