Sie haben Antworten auf die meisten Ihrer Fragen erhalten, aber Sie haben auch nach HTF gefragt und wie das funktioniert.
HTF ist ein Framework, das sowohl für Unit-Tests entwickelt wurde - es ist abwärtskompatibel mit HUnit (es integriert und umschließt es, um zusätzliche Funktionen bereitzustellen) - als auch für eigenschaftsbasierte Tests - es lässt sich in Quickcheck integrieren. Es verwendet einen Präprozessor, um Tests zu lokalisieren, sodass Sie keine Liste manuell erstellen müssen. Der Präprozessor wird Ihren Testquelldateien mithilfe eines Pragmas hinzugefügt:
{-# OPTIONS_GHC -F -pgmF htfpp #-}
(Alternativ könnten Sie Ihrem ghc-options
Eigentum in Ihrer Kabalendatei die gleichen Optionen hinzufügen , aber ich habe dies noch nie versucht, weiß also nicht, ob es nützlich ist oder nicht).
Der Präprozessor durchsucht Ihr Modul nach Funktionen der obersten Ebene mit dem Namen test_xxxx
oder prop_xxxx
und fügt sie einer Liste von Tests für das Modul hinzu. Sie können diese Liste entweder direkt verwenden, indem Sie eine main
Funktion in das Modul einfügen und sie ausführen ( main = htfMain htf_thisModuleTests
) oder sie aus dem Modul exportieren und ein Haupttestprogramm für mehrere Module erstellen, das die Module mit Tests importiert und alle ausführt:
import ModuleA
import ModuleB
main :: IO ()
main = htfMain htf_importedTests
Dieses Programm kann mit der von @jozefg beschriebenen Technik in cabal integriert oder in ghci geladen und interaktiv ausgeführt werden (obwohl nicht unter Windows - Einzelheiten finden Sie unter https://github.com/skogsbaer/HTF/issues/60 ).
Tasty ist eine weitere Alternative, mit der verschiedene Arten von Tests integriert werden können. Es hat keinen Präprozessor wie HTF, aber ein Modul, das ähnliche Funktionen mit Template Haskell ausführt . Wie bei HTF wird auch hier die Namenskonvention verwendet, um Ihre Tests zu identifizieren (in diesem Fall case_xxxx
eher als test_xxxx
). Neben HUnit- und QuickCheck-Tests enthält es auch Module zur Behandlung einer Reihe anderer Testtypen.