2015-10-02 11 views
8
私は

テストが失敗したときに私のHUnitテストスイートが合格するのはなぜですか?

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] 

test/Test.hsをお持ちの場合は

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と私は、私が手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になった場合、私のテストが失敗したという警告は表示されません。

答えて

4

Cabal users' guideによれば、exitcode-stdio-1.0インタフェースを使用して

テストスイートを実行すると、ゼロ以外の終了コードでテストの失敗を示して実行可能です。それらは標準出力およびエラー・チャネルを通じて人間が読めるログ情報を提供することができる。

あなたは

main :: IO Counts 
main = runTestTT $ TestList [test1, test2, test1] 

を定義しましたこれは、テストを実行するテスト情報を出力して、常に成功裏に終了します。 Cabalにテストが失敗したことを知らせたい場合は、Countsをキャプチャし、errorsfailuresをチェックし、見つからない場合はゼロ以外のステータスで終了する必要があります。

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インターフェイスに切り替えることを推奨しています。

+0

私は 'detailed-0.9'を見ていましたが、それはあまり安定しておらず使いづらいと感じました(http://stackoverflow.com/a/18686329/656912)。 – orome

+0

@raxacoricofallapatorius、可能性があります。私はどちらかとも決して混乱しませんでした。私は、既存のプロジェクトで既存のテストスイートを少し拡張しました。 – dfeuer

+0

@dfeuer:私は 'ExitSuccess'と' ExitFailure'であなたのアプローチを使いましたが、 'cabal test --show-details = 'always''を実行すると何らかの理由で動作しません。 1つの失敗があります。回避策をお勧めしますか? – altern

関連する問題