If I have test/Test.hs
with
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]
and a .cabal
with
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
and I run cabal test --show-details='always'
then I get
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
Why does my test suite pass when I've had failures? Likewise, if I cabal sdist
I get no warning that my tests have failed.
According to the Cabal users' guide,
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.
You've defined
main :: IO Counts
main = runTestTT $ TestList [test1, test2, test1]
This runs tests, prints out test information, and then always exits successfully. If you want Cabal to know the test has failed, you need to capture the Counts
, check for errors
and failures
, and exit with a non-zero status if you find such.
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)
The test-framework
package provides convenient defaultMain
functions that do this sort of thing; you may want to consider that approach.
You should note that the exitcode-stdio-1.0
interface is considered semi-deprecated; the Cabal maintainers recommend switching to their rather more Haskellian detailed-0.9
interface.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With