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
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
.
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.
- 1. Utilizzare i test quickCheck con Cabal?
- 2. Haskell Cabal QuickCheck Integration
- 3. Come devo eseguire test automatici di SQL ETL Scripts & SPROCs?
- 4. Perché la mia suite di test HUnit passa quando i miei test falliscono?
- 5. Dove inserire i dati per i test automatici con test?
- 6. Facebook connette test automatici, raccomandazioni?
- 7. È possibile eseguire test automatici Appium iOS su Ubuntu?
- 8. Test automatici per progetti basati sul web
- 9. Test automatici per le GUI Java Swing
- 10. Come caricare + scaricare runtime ASPNET, senza utilizzare la directory bin, per scopi di test automatici
- 11. Come utilizzare MIN_VERSION_ della cabal e altre macro con ghci?
- 12. Come si eseguono test automatici dei fogli di stile XSLT?
- 13. Test automatici delle app PhoneGap/Cordova
- 14. Come utilizzare Firebase per gestire calcoli automatici lato server?
- 15. DbContext.ChangeTracker nei test automatici genera SQLException
- 16. Test automatici degli UserForms VBA: strumenti e/o tecniche?
- 17. Cabal Test Suite con tipo dettagliato esempio
- 18. Come disattivare gli screenshot automatici sul test dell'interfaccia utente (Xcode)
- 19. Utilizzare Ant per eseguire solo test JUnit specifici
- 20. Come faccio a svn automaticamente quando i test automatici passano?
- 21. Test di javascript con Mocha: come posso utilizzare console.log per eseguire il debug di un test?
- 22. Come posso impostare un semplice test con Cabal?
- 23. Come installate pacchetti/librerie senza Cabal o Cabal-Install?
- 24. Come ottenere Karma per eseguire questi file di test?
- 25. Cabal e --no-require-sandbox
- 26. Come utilizzare google test per C++ per eseguire combinazioni di dati
- 27. Come posso decidere cosa testare manualmente e cosa fidarsi dei test automatici?
- 28. Cabal Cabal-Install non funziona, errore strano
- 29. Come scrivere test automatici per l'interfaccia utente di un'applicazione Windows Phone 7?
- 30. Come eseguire unit test con DSSS e GDC?
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
@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
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 –