Фон
Используя стек и его предустановленный файл Spec.hs
, насколько я знаю, вам необходимо импортировать следующие модули тестовой среды, чтобы выполнить правильный тест:
import qualified Test.Framework as TF
import qualified Test.Framework.Providers.HUnit as FHU
import qualified Test.Framework.Providers.QuickCheck2 as QC2
import qualified Test.HUnit as HU
import qualified Test.QuickCheck as QC
Следовательно, вам также необходимо добавить дополнительные зависимости в файл package.yaml
следующим образом:
tests:
XYZ-test:
main: Spec.hs
source-dirs: test
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- Test4
- test-framework
- test-framework-hunit
- test-framework-quickcheck2
- HUnit
- QuickCheck
Если вы импортируете объект для тестирования (назовите его MyModule
) и реализуете тестовые примеры в Spec.hs
для этого модуля, вы не сможете протестировать функции, которые используются внутри модуля (MyModule
).
Для тестирования внутренних функций вы можете реализовать тесты внутри модуля (MyModule
) и экспортировать тесты.
module MyModule
(
...
testCases, -- exported test cases
-- fun1 -- internal function not exported
) where
...
import qualified Test.Framework as TF
import qualified Test.Framework.Providers.HUnit as FHU
import qualified Test.HUnit as HU
fun1 :: [Bool] -> Integer -- internal function not exported
fun1 ...
testCases =
(FHU.testCase "MyModule.fun1 #1" ((fun1 []) HU.@?= 0)) :
(FHU.testCase "MyModule.fun1 #2" ((fun1 [True]) HU.@?= 0)) :
(FHU.testCase "MyModule.fun1 #2" ((fun1 [True, True]) HU.@?= 2)) :
[]
Но тогда вам также необходимо импортировать тестовую среду (по крайней мере, Test.Framework, Test.Framework.Providers.HUnit и Test.HUnit) и добавить дополнительные зависимости также в библиотеку (MyModule
). Следовательно, package.yaml будет выглядеть так:
...
dependencies:
- ...
- test-framework
- test-framework-hunit
- HUnit
library:
source-dirs: src
...
Вопрос
Есть ли более экономичный подход к экспорту модульного теста модуля MyModule
?