【发布时间】:2015-04-24 07:09:38
【问题描述】:
我正在开发的 Cabal 包有些地方没有意义,我将问题归结为以下示例:
我有以下简单的测试模块:
module Main where
import Test.QuickCheck (quickCheck)
main = quickCheck False
和以下Cabal文件在同一目录下:
name: project
version: 0.1.0.0
cabal-version: >= 1.10
build-type: Simple
executable project
main-is: Main.hs
build-depends: base, QuickCheck
default-language: Haskell2010
test-suite project-test
type: exitcode-stdio-1.0
main-is: Main.hs
build-depends: base, QuickCheck
default-language: Haskell2010
目录中唯一的其他文件是 dist(由 Cabal 在构建时创建)和 cabal 沙箱文件。可执行文件和测试套件都引用 Main.hs,因此我希望在运行“cabal run”时获得与运行“cabal test”时相同的测试结果。然而,显然情况并非如此。
“阴谋集团”给出:
Preprocessing executable 'project' for project-0.1.0.0...
Running project...
*** Failed! Falsifiable (after 1 test):
这是有道理的,因为属性测试“quickCheck False”应该会失败。正如预期的那样,这与我在 ghci 中运行 main 时得到的结果相同。
然而,“cabal test”给出:
Test suite project-test: RUNNING...
Test suite project-test: PASS
Test suite logged to: dist/test/project-0.1.0.0-project-test.log
1 of 1 test suites (1 of 1 test cases) passed.
为什么“cabal test”通过了测试用例,而“cabal run”却按预期失败了?
【问题讨论】:
-
我认为第一个问题是您编写“退出代码”的方式仍然可以-tbh:正确知道为什么您看不到
quickCheck的输出(可能是被cabal test抑制,因为它返回ok)。我通常使用hspec,效果很好——也许你会试一试 -
好吧,稍后我通过简单的网络搜索为您找到了可能的解决方案:cabal-test-quickcheck
标签: haskell cabal quickcheck