He estado peleando con Cabal durante una buena parte del día tratando de hacer que sus funciones de prueba automatizadas funcionen con HUnit. He leído la documentación here y here, y tengo mi sección Test-Suite configurada como se muestra, pero cada vez que intento crear el paquete usando cabal build
Cabal dice que el único tipo de Test-Suite admitido es exitcode-stdio-1.0
. ¿Lo que da?¿Cómo usar HUnit y Cabal para realizar pruebas automatizadas?
Respuesta
Antecedentes
Así que aquí es el trato, la documentación en el sitio Cabal es "documentación de futuro", es decir, no todas esas características se implementan y se libera aún. Cabal-install 0.14.0 viene con la interfaz detailed-0.9
, que es una versión detrás de lo especificado en los documentos (detailed-1.0
), pero no he encontrado ningún problema relacionado con esto todavía. Si tiene la versión de la plataforma Haskell 2011.4 que viene con cabal-install 0.10.2, no podrá usar la interfaz detailed-0.9
. Tendrá que actualizar a Haskell Platform 2012.2 que viene con cabal-install 0.14.0. También podría simplemente actualizar cabal-install por separado, que es lo que hice porque en Fedora 17 la plataforma Haskell solo está en 2011.4.
instalación
En la documentación here verá un ejemplo de cómo utilizar la interfaz detailed-0.9
con QuickCheck. Menciona algunos paquetes que tienen interfaces con HUnit, QuickCheck1 y QuickCheck2, pero solo el paquete para QuickCheck2 está disponible en hackage. Si desea los paquetes para el resto de los marcos necesitará usar darcs (un VCS) para descargarlos de la ubicación this. El comando que desea ejecutar para la interfaz HUnit es este: darcs get http://community.haskell.org/~ttuegel/cabal-test-hunit/
. Es posible que deba ajustar el archivo .cabal para que se genere, específicamente se basa en ghc 3.*
y cabal 1.10
. Cambié esto a mis versiones (ghc 4.*
y cabal 1.14
) y lo construí bien.
Prueba
vez que haya construido la interfaz que tiene que hacer algunas cosas en su módulo de prueba para Cabal puede ejecutarlo. Específicamente, deberá importar ambos Distribution.TestSuite
y Distribution.TestSuite.HUnit
. Después de eso, deberá convertir sus HUnit Tests a Cabal Tests, utilizando una función provista en la interfaz HUnit. Aquí están las líneas de código relevantes:
import qualified Distribution.TestSuite as Cabal
import qualified Distribution.TestSuite.HUnit as CabalHUnit
tests = map (\(x,y) -> CabalHUnit.test x y) [("Login tests", loginTests)]
Eso es todo! Debería poder ejecutar cabal configure --enable-tests && cabal build && cabal test
y ver que las pruebas de su unidad pasen (o fallen).
Edición
Editado para aclarar que la interfaz detailed-0.9
está incluido en Cabal a instalar 0.14.0, no detailed-1.0
.
Aunque la respuesta de Dwilson es buena, detailed
no es actualmente compatible. Puede integrar HUnit
con cabal
usando exitcode-stdio-1.0
y Test.Framework
.
Imprimirá todas las pruebas exitosas y fallidas en stdout
y fallará si las pruebas fallan. Ver mi gist.
- 1. ¿Cómo usar una máquina virtual con pruebas automatizadas?
- 2. Facebook connect pruebas automatizadas, recomendaciones?
- 3. Pruebas unitarias automatizadas con JavaScript
- 4. Pruebas automatizadas/unitarias de Vbscript
- 5. Qué BDD para aplicaciones backbone JS que admite pruebas automatizadas
- 6. Cómo realizar pruebas de carga para websockets
- 7. Pruebas automatizadas: formas de ayudar y educar a los desarrolladores?
- 8. UI pruebas automatizadas dentro de SharePoint
- 9. ¿Cómo realizo pruebas unitarias automatizadas en paquetes SSIS?
- 10. Estrategia para pruebas automatizadas de IU en máquinas virtuales remotas
- 11. ¿Usa las pruebas quickCheck con Cabal?
- 12. ¿Cómo realizo las pruebas automatizadas de hojas de estilos XSLT?
- 13. ¿Cómo puedo decidir qué probar manualmente y en qué confiar para las pruebas automatizadas?
- 14. ¿Cómo se sincroniza automáticamente cuando pasan las pruebas automatizadas?
- 15. ¿Cómo realizar pruebas de integración en PHP?
- 16. Cómo realizar pruebas unitarias Excepciones con PHPUnit?
- 17. ¿Estado actual de las pruebas integradas de la unidad con Haskell's Cabal?
- 18. Pruebas unitarias automatizadas para Javascript integradas con CruiseControl, nUnit, nAnt y ASP.net MVC
- 19. Suites de WPF de terceros con pruebas UI automatizadas/codificadas
- 20. ¿Las GUI deben tener sus propias pruebas automatizadas?
- 21. cabal-install y Debian
- 22. Cabal: configuración cabal falla
- 23. ¿Cómo escribir pruebas unitarias automatizadas para el procesador de anotación Java?
- 24. compilaciones automatizadas
- 25. ¿Hay un navegador sin cabeza para .NET (para pruebas de interfaz de usuario web automatizadas)?
- 26. Cómo realizar pruebas de bucle en Selenium IDE?
- 27. ¿Cómo instalas paquetes/bibliotecas sin Cabal o Cabal-Install?
- 28. ¿Cómo puedo realizar pruebas de mutación de mi programa Java?
- 29. ¿Existen marcos de pruebas unitarias automatizadas para probar un marco interno de enhebrado?
- 30. ¿Cómo utilizo MIN_VERSION_ de cabal y otras macros con ghci?
La solución no funciona con HP 2012.2. 'cabal --version' muestra' 0.14.0' y '1.14.0' respectivamente, pero' cabal configure --enable-tests' todavía dice "los tipos de prueba son: exitcode-stdio-1.0, detailed-0.9". Entonces, el '1.14.0' oficial aún está sin' detail-1.0'. – nponeccop
@nponeccop Lamento que mi solución haya sido engañosa. Lo he editado para que sea más claro. Para ser claros, la interfaz "Detailed-1.0" aún no está disponible, por lo que tendrás que usar la interfaz "detailed-0.9". Hasta ahora no he encontrado nada que deba estar en la interfaz 1.0 y no en la interfaz 0.9, sino en YMMV. – Dwilson
Para cualquiera que llegue aquí a través de la búsqueda de Google: tenga en cuenta que una solución mucho más simple es usar el tipo de prueba 'exitcode-stdio-1.0' en lugar de' detailed'. Aquí hay un ejemplo de trabajo que combina 'exitcode-stdio-1.0' y' HUnit': https://gist.github.com/23Skidoo/8019225 –