与quickcheck如何支持反例类似:
property \x ->
counterexample ("Foo failed with: " ++ ...) $
foo x
但以某种方式与
shouldBe
配合使用,例如failDetails (" details: " ++ baz a) $
a `shouldBe` 2
我希望它按照以下方式打印一些内容:
expected: 2
but got: 3
details: ...
最佳答案
是的,似乎有可能:
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 ($>) #-}