Um Unit-Tests, Codeabdeckung und Benchmarks richtig zu machen, müssen Sie hauptsächlich die richtigen Tools auswählen.
- Das Test-Framework bietet eine zentrale Anlaufstelle, um alle Ihre HUnit -Testfälle und QuickCheck- Eigenschaften von einem Gurt aus auszuführen .
- Die Codeabdeckung ist in Form des HPC- Tools in GHC integriert .
- Criterion bietet einige großartige Benchmarking-Maschinen
Ich werde als laufendes Beispiel ein Paket verwenden, das ich gerade mit Unit-Tests, Codeabdeckung und Benchmarks aktiviert habe:
http://github.com/ekmett/speculation
Sie können Ihre Tests und Benchmarks direkt in Ihre Kabalendatei integrieren, indem Sie Abschnitte für sie hinzufügen und sie hinter Flags maskieren, damit sie es nicht schaffen, dass jeder Benutzer Ihrer Bibliothek Zugriff darauf hat (und für sich selbst verwenden möchte) ) die genaue Version der von Ihnen ausgewählten Testtools.
http://github.com/ekmett/speculation/blob/master/speculation.cabal
Anschließend können Sie cabal mitteilen, wie Ihre Testsuite ausgeführt werden soll. Da es noch keinen Kabaltest gibt, haben wir einen Studenten, der daran für den diesjährigen Code-Sommer arbeitet! - Der beste Mechanismus, den wir haben, ist Hier erfahren Sie, wie Sie den Benutzerhakenmechanismus von cabal verwenden. Dies bedeutet, zu einem 'Custom'-Build mit Kabale zu wechseln und einen TestHook einzurichten. Ein Beispiel für einen TestHook, der ein mit Test-Framework geschriebenes Testprogramm ausführt und dann HPC auf das Profil anwendet, finden Sie hier:
http://github.com/ekmett/speculation/blob/master/Setup.lhs
Und dann können Sie das Test-Framework verwenden, um QuickCheck- und HUnit-Tests in einem Programm zu bündeln:
http://github.com/ekmett/speculation/blob/master/Test.hs
In der dortigen Kaballendatei wird sorgfältig darauf geachtet, -fhpc zu aktivieren, um das Testen der Codeabdeckung zu ermöglichen. Anschließend führt der testHook in Setup.lhs manuell hpc aus und schreibt seine Ausgabe in Ihr dist-Verzeichnis.
Für das Benchmarking ist die Geschichte etwas manueller, es gibt keine Option für den Kabalen-Benchmark. Sie könnten Ihre Benchmarks in Ihren Test-Hook einbinden, aber ich führe sie gerne von Hand aus, da Criterion so viele grafische Berichtsoptionen bietet. Sie können Ihre Benchmarks wie oben gezeigt zur Kaballendatei hinzufügen, ihnen separate Kompilierungsflaggen geben, sie hinter einer Kabalenflagge verstecken und dann Criterion verwenden, um das gesamte schwere Heben durchzuführen:
http://github.com/ekmett/speculation/blob/master/Benchmark.hs
Sie können dann Ihre Benchmarks über die Befehlszeile ausführen und Popup-KDE-Fenster mit Benchmark-Ergebnissen usw. abrufen.
Da Sie in der Praxis sowieso in Kabalen leben, während Sie Haskell-Code entwickeln, ist es sehr sinnvoll, Ihre Toolchain in diese zu integrieren.
Bearbeiten : Cabal Test Unterstützung gibt es jetzt. Siehe http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/developing-packages.html#test-suites
cabal bench
jetzt existiert es auch.