通常,任何重要的Haskell项目都是使用Cabal运行的。这负责构建,分发,文档(在haddock的帮助下)和测试。
标准方法是将测试放在test
目录中,然后在.cabal
文件中设置测试套件。用户手册中对此进行了详细说明。这是我的一个项目的测试套件的样子
Test-Suite test-melody
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: test
build-depends: base >=4.6 && <4.7,
test-framework,
test-framework-hunit,
HUnit,
containers == 0.5.*
然后在文件中 test/Main.hs
import Test.HUnit
import Test.Framework
import Test.Framework.Providers.HUnit
import Data.Monoid
import Control.Monad
import Utils
pushTest :: Assertion
pushTest = [NumLit 1] ^? push (NumLit 1)
pushPopTest :: Assertion
pushPopTest = [] ^? (push (NumLit 0) >> void pop)
main :: IO ()
main = defaultMainWithOpts
[testCase "push" pushTest
,testCase "push-pop" pushPopTest]
mempty
在哪里Utils
定义了一些更好的HUnit接口。
对于轻量级测试,强烈建议您使用QuickCheck。它使您可以编写简短属性并通过一系列随机输入对其进行测试。例如:
import Test.QuickCheck
prop_reverseReverse :: [Int] -> Bool
prop_reverseReverse xs = reverse (reverse xs) == xs
然后
$ ghci Tests.hs
> import Test.QuickCheck
> quickCheck prop_reverseReverse
.... Passed Tests (100/100)