2012-11-23 4 views
10

Das Modul Batch von QuickCheck wurde mit version 2 (1.2.0.1 still has it) entfernt. Aus diesem Grund fühle ich mich immer wie mapM_-mehrere Tests zusammen ist Art von hacky. Überschaue ich die Nachfolgerfunktion in QuickCheck 2? Gibt es eine kanonische Möglichkeit, unabhängige Tests zusammenzufassen?QuickCheck 2 Stapelverarbeitung

+3

Blick auf [ 'Test-framework'] (http://hackage.haskell.org/package/test-framework) und [' Test-Framework-quickcheck2'] (http: // Hackage .haskell.org/package/test-framework-quickcheck2). – dflemstr

Antwort

9

Es gibt die Möglichkeit, alle Tests im aktuellen Modul über Test.QuickCheck.All zu gruppieren. Es erfordert Template Haskell und alle Eigenschaften müssen mit prop_ beginnen. Ex:

{-# 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

Zwei wichtige Hinweise: Erstens scheinen Eigenschaften von importierten Modulen nicht enthalten zu sein. Zweitens, (und es sieht sehr seltsam aus) müssen Sie in GHC 7.8 'return []' vor der Zeile 'runTests = $ quickCheckAll 'einfügen. Weitere Informationen finden Sie auf der Seite [Modul Schellfisch] (http://hackage.haskell.org/package/QuickCheck-2.7.6/docs/Test-QuickCheck-All.html). – MasterMastic

+0

Wenn Sie über eine Cabal-Test-Suite testen, würde Ihnen diese 'main' wahrscheinlich besser passen:' main = runTests >> = \ passand -> wenn übergeben, dann exitSuccess else exitFailure'. Außerdem müssen Sie System.Exit (exitSuccess, exitFailure) importieren. – MasterMastic