【发布时间】:2012-08-08 23:17:35
【问题描述】:
我已经与 Cabal 斗争了一天的大部分时间,试图使其自动化测试功能与 HUnit 一起使用。我已经阅读了文档here 和here,并且我已经设置了我的测试套件部分,就像它显示的那样,但是每当我尝试使用cabal build 构建包时,Cabal 说唯一支持的测试套件类型是exitcode-stdio-1.0。什么给了?
【问题讨论】:
标签: unit-testing haskell cabal hunit
我已经与 Cabal 斗争了一天的大部分时间,试图使其自动化测试功能与 HUnit 一起使用。我已经阅读了文档here 和here,并且我已经设置了我的测试套件部分,就像它显示的那样,但是每当我尝试使用cabal build 构建包时,Cabal 说唯一支持的测试套件类型是exitcode-stdio-1.0。什么给了?
【问题讨论】:
标签: unit-testing haskell cabal hunit
所以这是交易,cabal 网站上的文档是“未来文档”,也就是说,并非所有这些功能都已实现和发布。 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 上。
在文档here 中,您将看到如何将detailed-0.9 接口与QuickCheck 一起使用的示例。它提到了一些具有 HUnit、QuickCheck1 和 QuickCheck2 接口的包,但只有 QuickCheck2 的包在 hackage 上可用。如果您想要其余框架的软件包,您需要使用 darcs(一个 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.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。
【讨论】:
cabal --version 分别显示 0.14.0 和 1.14.0,但 cabal configure --enable-tests 仍然显示“测试类型为:exitcode-stdio-1.0,detailed-0.9”。所以官方的1.14.0还是没有detailed-1.0。
exitcode-stdio-1.0 而不是 detailed。这是一个结合了exitcode-stdio-1.0 和HUnit 的工作示例:gist.github.com/23Skidoo/8019225
虽然 Dwilson 的回答很好,但 detailed 目前还没有得到很好的支持。您可以使用exitcode-stdio-1.0 和Test.Framework 将HUnit 与cabal 集成。
它将所有成功和失败的测试输出到stdout,如果测试失败,则构建失败。见我的gist。
【讨论】: