Ви мали відповіді на більшість своїх запитань, але ви також запитували про HTF та як це працює.
HTF - це фреймворк, призначений як для модульного тестування - він сумісний із HUnit (він інтегрує та обертає його для надання додаткових функцій), так і для тестування на основі властивостей - він інтегрується за допомогою швидкої перевірки. Він використовує препроцесор для пошуку тестів, так що вам не доведеться вручну створювати список. Препроцесор додається до ваших тестових вихідних файлів за допомогою прагми:
{-# OPTIONS_GHC -F -pgmF htfpp #-}
(Як варіант, я думаю, ви можете додати ті самі параметри до свого ghc-options
властивості у вашому файлі cabal, але я ніколи не пробував цього, тому не знаю, корисно це чи ні).
Препроцесор сканує ваш модуль на наявність функцій найвищого рівня з іменем test_xxxx
або prop_xxxx
додає їх до списку тестів для модуля. Ви можете використовувати цей список безпосередньо, помістивши main
функцію в модуль і запустивши їх ( main = htfMain htf_thisModuleTests
), або експортувати з модуля, і мати основну тестову програму для декількох модулів, яка імпортує модулі з тестами і запускає всі з них:
import ModuleA
import ModuleB
main :: IO ()
main = htfMain htf_importedTests
Цю програму можна інтегрувати з cabal, використовуючи техніку, описану @jozefg, або завантажувати в ghci та запускати інтерактивно (хоча не у Windows - докладніше див. Https://github.com/skogsbaer/HTF/issues/60 ).
Смачне - ще одна альтернатива, яка забезпечує спосіб інтеграції різних видів тестів. Він не має попереднього процесора, як HTF, але має модуль, який виконує подібні функції за допомогою шаблону Haskell . Як HTF, він також спирається на іменування , щоб ідентифікувати тести (в даному випадку, case_xxxx
а не test_xxxx
). Окрім тестів HUnit та QuickCheck, він також має модулі для обробки ряду інших типів тестів.