2012-08-08 68 views
14

我一直在努力使自己的自动测试功能与HUnit一起工作,一直在与Cabal抗争。我已阅读文档herehere,并且我已将测试套件部分设置为像显示的那样,但是每当我尝试使用cabal build构建套件时,Cabal说支持的唯一测试套件类型是exitcode-stdio-1.0。是什么赋予了?如何使用HUnit和Cabal进行自动测试?

回答

17

背景

所以这里的交易,在阴谋的网站上的文档“今后的文件,”那是,不是所有的这些功能都实现,并且尚未公布。 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 Platform仅在2011.4上。

安装

在文档here,你会看到如何使用detailed-0.9接口与快速检查的例子。它提到了一些与HUnit,QuickCheck1和QuickCheck2有接口的软件包,但只有QuickCheck2的软件包可用于hackage。如果您需要其他框架的软件包,则需要使用darcs(VCS)从this位置下载它们。您要为HUnit界面运行的命令是:darcs get http://community.haskell.org/~ttuegel/cabal-test-hunit/。您可能需要调整.cabal文件才能生成它,特别是它依赖于​​和cabal 1.10。我将其更改为我的版本(ghc 4.*cabal 1.14),并且它构建得很好。

测试

一旦你的界面建立你需要做的一些东西,你的测试模块中这样惊天动地可以运行它。具体来说,您需要导入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接口被包括在小集团安装0.14.0,不detailed-1.0

+0

该解决方案不适用于HP 2012.2。 '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'。 – nponeccop 2012-09-01 19:31:07

+0

@nponeccop对不起,我的解决方案有误导性。我编辑它更清楚。清楚的是,“详细-1.0”界面还没有出来,所以你必须使用“详细-0.9”界面。到目前为止,我还没有遇到任何应该在1.0界面而不是0.9界面,但是YMMV。 – Dwilson 2012-09-03 17:15:37

+3

对于通过Google搜索到达这里的任何人:请注意,更简单的解决方案是使用测试类型'exitcode-stdio-1.0'而不是'detailed'。下面是一个结合'exitcode-stdio-1.0'和'HUnit'的工作示例:https://gist.github.com/23Skidoo/8019225 – 2013-12-18 09:32:43

1

虽然Dwilson的回答很好,但是detailed目前得不到很好的支持。您可以使用exitcode-stdio-1.0Test.Framework整合HUnitcabal

它会输出所有成功和失败的测试stdout以及失败建设,如果测试失败。请参阅我的gist

相关问题