如何使用HUnit和Cabal进行自动化测试?

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.TestSuiteDistribution.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.

  • 对于通过Google搜索到达此处的任何人:请注意,更简单的解决方案是使用测试类型`exitcode-stdio-1.0`而不是`detailed`.这是一个结合了`exitcode-stdio-1.0`和`HUnit`的工作示例:https://gist.github.com/23Skidoo/8019225 (3认同)