背景
使用堆栈及其预设文件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
?