15

一天的大部分时间里,我一直在与 Cabal 进行斗争,试图让它的自动化测试功能与 HUnit 一起工作。我已经阅读了这里这里的文档,并且我已经设置了我的测试套件部分,就像它显示的那样,但是每当我尝试使用cabal buildCabal 构建包时,都说唯一支持的测试套件类型是exitcode-stdio-1.0. 是什么赋予了?

4

2 回答 2

18

背景

所以这是交易,阴谋集团网站上的文档是“未来文档”,也就是说,并非所有这些功能都已实现和发布。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.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.

于 2012-08-08T23:17:35.343 回答
2

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

如果测试失败,它将输出所有成功和失败的测试stdout以及失败的构建。见我的要点

于 2014-12-06T06:48:00.287 回答