2012-04-26 3 views
8

ein Fan von Quick Check sein, ich habe eine Mengesammeln automatisch alle Quickchecks

prop_something_something = ... 

in meinem Programm.

Der Einfachheit halber auf einfache Weise alle von ihnen laufen, definiere ich

runchecks = do 
    quickCheck prop_something_something 
    quickCheck prop_something_different 

aber gibt es eine schöne Art und Weise runchecks zu generieren?

TL; DR: Ich möchte alle QuickChecks in einer Datei leicht ausführen. Ich denke, ein Weg besteht darin, den runnable-Tests test_ oder etwas Ähnliches voranzutreiben, aber das ist vielleicht zu hacky.

Antwort

7

Sie können dies mit dem test-framework-th Paket tun. Just do:

import Test.Framework.TH 
import Test.Framework.Providers.QuickCheck2 
runchecks = $(defaultMainGenerator) 

Dadurch wird die test-framework Weg der laufenden Tests verwenden, dh Sie etwas mehr Informationen erhalten werden als das, was man einfach durch Ausführen der Tests nacheinander bekommen würde, die oft eine gute Sache .

Sie müssen offensichtlich TemplateHaskell aktivieren, damit dies funktioniert; Fügen Sie entweder Default-extensions: TemplateHaskell zu Ihrer Cabal-Datei hinzu oder fügen Sie am Anfang der Datei {-# LANGUAGE TemplateHaskell #-} hinzu.

+0

Indem ich nur das hinzufüge, bekomme ich diesen Fehler: http://hpaste.org/67672 - muss ich noch andere Änderungen vornehmen? Ich werde mehr Code einfügen, wenn Sie möchten. –

+0

Anscheinend müssen Sie auch das 'QuickCheck2'-Provider-Modul einbeziehen, was meiner Meinung nach sinnvoll ist. Siehe meine aktualisierte Antwort für weitere Informationen. – dflemstr

+0

Ja, Hinzufügen von Import Test.Framework.Providers.QuickCheck2 hat funktioniert. Vielen Dank. :) –

8

Eine zusätzliche Anmerkung: Diese Funktionalität ist auch in QuickCheck 2 vorhanden, siehe die Funktion quickCheckAll, die einen Import von Test.QuickCheck.All sowie TemplateHaskell erfordert. quickCheckAll testet alle Funktionen in Ihrem Modul, deren Name mit prop_ beginnt.