Dwi*_*son 14 haskell unit-testing cabal hunit
我一直在与Cabal争夺一天的大部分时间,试图使其自动化测试功能与HUnit一起使用.我已经在这里和这里阅读了文档,并且我的Test-Suite部分设置如同它所示,但每当我尝试使用cabal buildCabal 构建软件包时,我认为唯一支持的Test-Suite类型是exitcode-stdio-1.0.是什么赋予了?
Dwi*_*son 17
所以这是交易,cabal网站上的文档是"未来文档",也就是说,并非所有这些功能都已实现和发布.Cabal-install 0.14.0附带了detailed-0.9接口,这是一个落后于docs(detailed-1.0)中指定版本的版本,但我还没有遇到任何与此相关的问题.如果你有cabal-install 0.10.2附带的Haskell平台版本2011.4,你将无法使用该detailed-0.9界面.您需要升级到装有cabal-install 0.14.0的Haskell Platform 2012.2.您也可以单独升级cabal-install,这就是我所做的,因为在Fedora 17上,Haskell平台仅在2011.4上.
在这里的文档中,您将看到如何使用detailed-0.9QuickCheck接口的示例.它提到了一些包含HUnit,QuickCheck1和QuickCheck2接口的软件包,但只有QuickCheck2软件包可用于hackage.如果你想为框架,其余部分的包,你将需要使用的darcs(一个VCS)从下载他们这个位置.您要为HUnit接口运行的命令是:darcs get http://community.haskell.org/~ttuegel/cabal-test-hunit/.您可能必须调整.cabal文件才能使其生成,特别是它依赖于ghc 3.*和cabal 1.10.我将其更改为我的版本(ghc 4.*和cabal 1.14),它构建得很好.
一旦你构建了界面,你需要在你的测试模块中做一些事情,以便Cabal可以运行它.具体来说,你需要导入两个Distribution.TestSuite和Distribution.TestSuite.HUnit.之后,您需要使用HUnit界面中提供的功能将HUnit Tests转换为Cabal Tests.这是相关的代码行:
import qualified Distribution.TestSuite as Cabal
import qualified Distribution.TestSuite.HUnit as CabalHUnit
tests = map (\(x,y) -> CabalHUnit.test x y) [("Login tests", loginTests)]
Run Code Online (Sandbox Code Playgroud)
而已!您应该能够运行cabal configure --enable-tests && cabal build && cabal test并看到您的单元测试通过(或失败).
编辑
编辑以阐明该detailed-0.9接口包含在cabal-install 0.14.0中,而不是detailed-1.0.