2016-09-25 7 views
1

同様quickcheckは反例をサポートする方法に:HSpec(またはHUnit)では、印刷が行われるアサーションにさらに情報を添付することができますか?

property \x -> 
    counterexample ("Foo failed with: " ++ ...) $ 
    foo x 

が、それはshouldBeで動作するような方法で、例えば

failDetails (" details: " ++ baz a) $ 
    a `shouldBe` 2 

そして、私はそれはの線に沿って何か印刷したいと思います:

expected: 2 
but got: 3 
details: ... 

答えて

3

をはい、可能のようです:

import Control.Exception 
import Test.HUnit.Lang (HUnitFailure(..)) 

failDetails details assert = do 
    assert `catch` \(HUnitFailure loc msg) -> do 
    throw $ HUnitFailure loc $ msg ++ "\n" ++ details 

我々は、shouldBeによってスローされた例外をキャッチメッセージを修正して、それをやり直してください。我々が定義した場合

1 `shouldBe` 2 
    $> failDetails "foobar" 

私たちもそれが好きで使用することができます

($>) = flip ($) 
infixl 0 $> 
{-# INLINE ($>) #-} 
関連する問題