zou*_*oul 5 haskell unit-testing cabal
我有一个Cabal测试目标:
test-suite Tests
type: exitcode-stdio-1.0
main-is: Main.hs
hs-source-dirs: test, src
build-depends: base, …
default-language: Haskell2010
Run Code Online (Sandbox Code Playgroud)
一个简单的测试Main.hs:
import Test.HUnit
testSanity = TestCase $ assertEqual "Should fail" 2 1
main = runTestTT testSanity
Run Code Online (Sandbox Code Playgroud)
现在运行cabal test通行证:
Test suite Tests: RUNNING...
Test suite Tests: PASS
Test suite logged to: dist/test/Project-0.1.0-Tests.log
1 of 1 test suites (1 of 1 test cases) passed.
Run Code Online (Sandbox Code Playgroud)
即使在测试套件日志中正确记录了失败:
Test suite Tests: RUNNING...
Cases: 1 Tried: 0 Errors: 0 Failures: 0
### Failure:
Should fail
expected: 2
but got: 1
Cases: 1 Tried: 1 Errors: 0 Failures: 1
Test suite Tests: PASS
Test suite logged to: dist/test/Project-0.1.0-Tests.log
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
main必须是类型的IO a地方a可以是任何东西,而价值是不以任何方式对项目的POSIX退出状态并列.您需要查看Counts返回的runTest并明确选择成功或失败的输出代码.
import System.Exit
main :: IO ()
main = do
cs@(Counts _ _ errs fails) <- runTestTT testSanity
putStrLn (showCounts cs)
if (errs > 0 || fails > 0)
then exitFailure
else exitSuccess
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |