一天的大部分时间里,我一直在与 Cabal 进行斗争,试图让它的自动化测试功能与 HUnit 一起工作。我已经阅读了这里和这里的文档,并且我已经设置了我的测试套件部分,就像它显示的那样,但是每当我尝试使用cabal build
Cabal 构建包时,都说唯一支持的测试套件类型是exitcode-stdio-1.0
. 是什么赋予了?
2 回答
背景
所以这是交易,阴谋集团网站上的文档是“未来文档”,也就是说,并非所有这些功能都已实现和发布。Cabal-install 0.14.0 带有detailed-0.9
接口,这是文档中指定的版本(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.9
界面与 QuickCheck 一起使用的示例。它提到了一些具有 HUnit、QuickCheck1 和 QuickCheck2 接口的包,但只有 QuickCheck2 的包在 hackage 上可用。如果您想要其余框架的软件包,您需要使用 darcs(一个 VCS)从该位置下载它们。您要为 HUnit 接口运行的命令是这样的darcs get http://community.haskell.org/~ttuegel/cabal-test-hunit/
:您可能必须调整 .cabal 文件才能构建它,特别是它依赖于ghc 3.*
and cabal 1.10
。我将其更改为我的版本(ghc 4.*
和cabal 1.14
)并且它构建得很好。
测试
构建好界面后,您需要在测试模块中做一些事情,以便 Cabal 可以运行它。具体来说,您需要同时导入Distribution.TestSuite
和Distribution.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
.
虽然 Dwilson 的回答很好,但detailed
目前没有得到很好的支持。您可以HUnit
使用和cabal
集成。exitcode-stdio-1.0
Test.Framework
如果测试失败,它将输出所有成功和失败的测试stdout
以及失败的构建。见我的要点。