Haskell Cabal QuickCheck集成

10
我一直在尝试使用cabal-install来构建和测试我的haskell项目,有点类似于Java项目中使用Maven的方式,主要是因为它似乎也是集成到Jenkins或ci等中的好方法,并且它似乎非常可靠,因为你不需要设置开发环境等来检查和确认代码是否编译正确。
无论如何,我正在使用QuickCheck和HUnit进行测试。在另一个Stack Exchange here上,我找到了一种很好的方法来将HUnit和cabal集成起来,通过使用Distribution.TestSuite.HUnit中的test函数来创建一个在我的测试模块中公开的tests数组。这个方法可以使用。
我尝试用相同的设置方式来使用quickcheck,
    import qualified Distribution.TestSuite.QuickCheck2 as CabalQuickCheck

    alwaysFalseOneArg::Int->(Int,Int)
    alwaysFalseOneArg x = (x,x)

    quickCheckPropOneArg = \s->let (a,b)=alwaysFalseOneArg s  in a==b && a/=b

    cabalQCTest = CabalQuickCheck.test "test" quickCheckPropOneArg

    tests=cabalQCTest:[]

我想看到这个测试失败。

我有一个cabal文件,可以与HUnit设置一起工作,使用HUnit测试按预期成功或失败。然而,如果我使用相同的设置来执行quickcheck测试,cabal会告诉我它找到了测试套件,但其中没有测试。我也尝试了site上提到的Distribution.TestSuite.QuickCheck2方法,但他们似乎没有提及如何暴露测试,并且我似乎无法使其运行。我现在有点迷茫,我可以使用quickcheck本身运行这些quickcheck测试,但不能使用cabal进行测试。我希望能够快速验证所有我的测试和代码,并在Jenkins等地方使用它。有人有想法吗?

我尝试提供所有必要的信息,以免过于复杂,因此没有发布完整的cabal文件等内容,如果需要的话,我当然会这样做。我找到了很多类似的帖子,但大多数都归结为使用不同于detailed-0.9的东西,这将是可惜的,因为它似乎与HUnit一起非常好用,而且我当然想以相同的方式同时使用HUnit和QuickCheck,最好是暴露一个包含HUnit和QuickCheck测试的测试数组。

这里有一个可能的例子: https://github.com/patperry/hs-monte-carlo/blob/master/monte-carlo.cabal 还有一个使用main调用QC的测试: https://github.com/patperry/hs-monte-carlo/blob/master/tests/Main.hs - gliptak
1
继续跟进gliptak的评论 - 我会调查使用test-framework; 我发现它更方便一些。一个额外的 例子 - isturdy
1个回答

3
我同意 isturdy 的观点:我一定会尝试使用 test-framework + test-framework-quickcheck2。请查看这个例子,了解如何在项目中同时使用它们。请注意被称为prop_*的属性。
您还可以查看项目 haskell-minecraft-tool,以了解测试输出的样子。使用以下命令运行测试:
cabal configure --enable-tests && cabal build && cabal test

请查看此处的 .cabal 文件以了解所需的软件包。这些软件包包括 test-frameworktest-framework-quickcheck2QuickCheck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接