2012-08-08 14 views
14

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

17

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.

+0

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

+0

@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

+3

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 –

1

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.

Cuestiones relacionadas