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-optionsEigentum 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_xxxxoder prop_xxxxund fügt sie einer Liste von Tests für das Modul hinzu. Sie können diese Liste entweder direkt verwenden, indem Sie eine mainFunktion 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_xxxxeher als test_xxxx). Neben HUnit- und QuickCheck-Tests enthält es auch Module zur Behandlung einer Reihe anderer Testtypen.