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

时间:2012-08-08 23:17:35

标签: unit-testing haskell cabal hunit

我一直在与Cabal争夺一天的大部分时间,试图使其自动化测试功能与HUnit一起使用。我已经阅读了文档herehere,我的Test-Suite部分就像它显示的一样,但每当我尝试使用cabal build构建软件包时,Cabal说仅支持的Test-Suite类型为exitcode-stdio-1.0。是什么给了什么?

2 个答案:

答案 0 :(得分:17)

背景

所以这是交易,cabal网站上的文档是"未来的文档,"也就是说,并非所有这些功能都已实现和发布。 Cabal-install 0.14.0附带detailed-0.9界面,这是版本(detailed-1.0)中指定的版本,但我没有遇到任何与之相关的问题这个呢。如果您拥有cabal-install 0.10.2附带的Haskell Platform版本2011.4,您将无法使用detailed-0.9接口。您需要升级到装有cabal-install 0.14.0的Haskell Platform 2012.2。你也可以单独升级cabal-install,这就是我所做的,因为在Fedora 17上,Haskell平台仅在2011.4上。

安装

在文档here中,您将看到如何使用QuickCheck的detailed-0.9界面的示例。它提到了一些包含HUnit,QuickCheck1和QuickCheck2接口的软件包,但只有QuickCheck2软件包可用于hackage。如果您需要其他框架的软件包,则需要使用darc(VCS)从this位置下载它们。您要为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测试转换为Cabal测试。这是相关的代码行:

import qualified Distribution.TestSuite as Cabal
import qualified Distribution.TestSuite.HUnit as CabalHUnit

tests = map (\(x,y) -> CabalHUnit.test x y) [("Login tests", loginTests)]

那就是它!您应该能够运行cabal configure --enable-tests && cabal build && cabal test并看到您的单元测试通过(或失败)。

修改
编辑以澄清detailed-0.9接口包含在cabal-install 0.14.0中,而不是detailed-1.0

答案 1 :(得分:1)

虽然Dwilson的回答很好,但detailed目前还没有得到很好的支持。您可以使用HUnitcabalexitcode-stdio-1.0Test.Framework集成。

它会将所有成功和失败的测试输出到stdout,如果测试失败则会失败。查看我的gist