2012-01-23 15 views
9

Estoy tratando de entender cómo integrar algunas pruebas de comprobación rápida con cabal. Este gist sugiere que la función quickCheck devuelve un estado distinto de cero en caso de error, pero no obtengo ese comportamiento, por lo que el tipo de prueba exitcode-stdio-1.0 de cabal no parece funcionar a menos que desee llamar al error en todas mis pruebas.Estado de salida QuickCheck en fallas, y integración cabal

El cabal user guide también menciona un detailed-1.0 banco de pruebas, pero AFAICT esto no existe todavía. ¿Sigue siendo el caso?

Parece de las respuestas como this one que mucha gente está usando el test-framework package. Eso es exagerado para mí, pero ¿es eso lo que debería usar?

Me quedé un poco insatisfecho con esta situación.

versiones de las cosas que estoy usando:

cabal-install version 0.10.2 
using version 1.10.1.0 of the Cabal library 
QuickCheck-2.4.1.1 

Respuesta

13

En cuanto a quickCheck's implementation, que de hecho nunca se sale del programa. Sin embargo, se puede implementar fácilmente este comportamiento usando quickCheckResult:

import Control.Monad 
import Test.QuickCheck 
import Test.QuickCheck.Test 
import System.Exit 

main :: IO() 
main = do 
    result <- quickCheckResult prop 
    unless (isSuccess result) exitFailure 

Mi entendimiento es que detailed-1.0 no se considera listo para el uso general, sin embargo, y que exitcode-stdio-1.0 sigue siendo la solución de prueba recomendada por ahora.

+4

Sé que han pasado más de 3 años, pero pasé demasiado tiempo tratando de descubrir que también es necesario 'importar Test.QuickCheck.Test' para' isSuccess' a "estar dentro del alcance". En caso de que alguien también tenga ese problema. En una nota lateral, ¿hay alguna manera de hacerlo más agradable? (es decir, no tiene que hacer tanto 'import Test.QuickCheck' sino también' Test.QuickCheck.Test'?) – conrad

6

Utilicé test-framework en la última versión de mi paquete Decimal. No fue excesivo; hizo justo lo que se quería. Eche un vistazo al complete source code si desea un ejemplo de cómo usarlo.

+0

Gracias por el ejemplo, creo que iré por esa ruta – jberryman

Cuestiones relacionadas