为什么我的 HUnit 测试套件失败但在 Cabal 中成功通过?
Why does my HUnit test suite fail but pass successfully in Cabal?
如果我有 test/Test.hs
和
module Main where
import Test.HUnit
test1 :: Test
test1 = TestCase $ assertEqual "Should be one" 1 5
test2 :: Test
test2 = TestCase $ assertEqual "Shold both be zero" 0 0
main :: IO Counts
main = runTestTT $ TestList [test1, test2, test1]
和一个 .cabal
和
test-suite my-test
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Test.hs
build-depends: base >= 4.8.1.0 && <4.9,
HUnit >= 1.3
default-language: Haskell2010
然后我运行cabal test --show-details='always'
然后我得到
Test suite my-test: RUNNING...
### Failure in: 0
test/Test.hs:6
Should be one
expected: 1
but got: 5
### Failure in: 2
test/Test.hs:6
Should be one
expected: 1
but got: 5
Cases: 3 Tried: 3 Errors: 0 Failures: 2
Test suite my-test: PASS
为什么我的测试套件在失败时却通过了?同样,如果我 cabal sdist
我没有收到测试失败的警告。
Test suites using the exitcode-stdio-1.0
interface are executables that indicate test failure with a non-zero exit code when run; they may provide human-readable log information through the standard output and error channels.
您已定义
main :: IO Counts
main = runTestTT $ TestList [test1, test2, test1]
这样运行测试,打印出测试信息,然后总是成功退出。如果你想让 Cabal 知道测试失败了,你需要捕获 Counts
,检查 errors
和 failures
,如果你发现这样的话,以非零状态退出。
import System.Exit
main :: IO ()
main = do
results <- runTestTT $ TestList [test1, test2, test1]
if (errors results + failures results == 0)
then
exitWith ExitSuccess
else
exitWith (ExitFailure 1)
test-framework
包提供了方便的 defaultMain
函数来做这类事情;您可能需要考虑这种方法。
您应该注意到 exitcode-stdio-1.0
接口被认为是半弃用的; Cabal 维护者建议切换到他们更像 Haskellian 的 detailed-0.9
界面。
如果我有 test/Test.hs
和
module Main where
import Test.HUnit
test1 :: Test
test1 = TestCase $ assertEqual "Should be one" 1 5
test2 :: Test
test2 = TestCase $ assertEqual "Shold both be zero" 0 0
main :: IO Counts
main = runTestTT $ TestList [test1, test2, test1]
和一个 .cabal
和
test-suite my-test
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Test.hs
build-depends: base >= 4.8.1.0 && <4.9,
HUnit >= 1.3
default-language: Haskell2010
然后我运行cabal test --show-details='always'
然后我得到
Test suite my-test: RUNNING...
### Failure in: 0
test/Test.hs:6
Should be one
expected: 1
but got: 5
### Failure in: 2
test/Test.hs:6
Should be one
expected: 1
but got: 5
Cases: 3 Tried: 3 Errors: 0 Failures: 2
Test suite my-test: PASS
为什么我的测试套件在失败时却通过了?同样,如果我 cabal sdist
我没有收到测试失败的警告。
Test suites using the
exitcode-stdio-1.0
interface are executables that indicate test failure with a non-zero exit code when run; they may provide human-readable log information through the standard output and error channels.
您已定义
main :: IO Counts
main = runTestTT $ TestList [test1, test2, test1]
这样运行测试,打印出测试信息,然后总是成功退出。如果你想让 Cabal 知道测试失败了,你需要捕获 Counts
,检查 errors
和 failures
,如果你发现这样的话,以非零状态退出。
import System.Exit
main :: IO ()
main = do
results <- runTestTT $ TestList [test1, test2, test1]
if (errors results + failures results == 0)
then
exitWith ExitSuccess
else
exitWith (ExitFailure 1)
test-framework
包提供了方便的 defaultMain
函数来做这类事情;您可能需要考虑这种方法。
您应该注意到 exitcode-stdio-1.0
接口被认为是半弃用的; Cabal 维护者建议切换到他们更像 Haskellian 的 detailed-0.9
界面。