我一直在与Cabal争夺一天的大部分时间,试图使其自动化测试功能与HUnit一起使用。我已经阅读了文档here和here,我的Test-Suite部分就像它显示的一样,但每当我尝试使用cabal build
构建软件包时,Cabal说仅支持的Test-Suite类型为exitcode-stdio-1.0
。是什么给了什么?
答案 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.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
。
答案 1 :(得分:1)
虽然Dwilson的回答很好,但detailed
目前还没有得到很好的支持。您可以使用HUnit
和cabal
将exitcode-stdio-1.0
与Test.Framework
集成。
它会将所有成功和失败的测试输出到stdout
,如果测试失败则会失败。查看我的gist。