2012-11-23 5 views
10

Il modulo Batch di QuickCheck è stato rimosso con version 2 (1.2.0.1 still has it). Per questo motivo, mi sento sempre come mapM_: fare test multipli insieme è una specie di hacky. Sto trascurando la funzione successore in QuickCheck 2? Esiste un modo canonico per raggruppare test indipendenti?QuickCheck 2 elaborazione batch

+3

Look at [ 'test-framework'] (http://hackage.haskell.org/package/test-framework) e [' test-quadro-quickcheck2'] (http: // hackage .haskell.org/pacchetto/test-quadro-quickcheck2). – dflemstr

risposta

9

C'è l'opzione "vai alla grande o vai a casa" per raggruppare tutti i test nel modulo corrente tramite Test.QuickCheck.All. Richiede Template Haskell e tutte le proprietà devono iniziare con prop_. Es:

{-# LANGUAGE TemplateHaskell #-} 

import Test.QuickCheck.All 

prop_one, prop_two :: a -> Bool 
prop_one = const True 
prop_two = const True 

runTests :: IO Bool 
runTests = $quickCheckAll 

main :: IO() 
main = runTests >>= \passed -> if passed then putStrLn "All tests passed." 
             else putStrLn "Some tests failed." 
+1

Due note importanti: in primo luogo, le proprietà dei moduli importati non sembrano essere incluse. Secondo, (e sembra molto strano), in GHC 7.8 è necessario inserire 'return []' prima della riga 'runTests = $ quickCheckAll'. Vedi la pagina [modulo haddock] (http://hackage.haskell.org/package/QuickCheck-2.7.6/docs/Test-QuickCheck-All.html) per maggiori informazioni. – MasterMastic

+0

Se stai provando attraverso una cabal test-suite, questo 'main' probabilmente ti si addice meglio:' main = runTests >> = \ passed -> se passato poi exitSuccess else exitFailure'. E dovrai anche importare System.Exit (exitSuccess, exitFailure) '. – MasterMastic