如何使用Hunit测试导入Control.Monad.Except?

时间:2017-01-14 22:40:32

标签: haskell hunit

如何测试Control.Monad.Except(两个警卫结果)的功能如下:

foo :: Double -> Double -> Except String Double
foo x y
  | x < -10.0 = throwError "Invalid parameter"
  | otherwise = pure $ x + y

使用hunit

1 个答案:

答案 0 :(得分:2)

编写一些使用runExcept执行Except操作并使用~?=检查其结果的函数非常简单。

shouldThrow :: Eq e => Except e a -> e -> Test
m `shouldThrow` e = runExcept m ~?= Left e

shouldReturn :: Eq a => Except e a -> a -> Test
m `shouldReturn` x = runExcept m ~?= Right x

使用示例:

testFoo = TestList [
    foo -11 2 `shouldThrow` "Invalid parameter",
    foo 3 1 `shouldReturn` 4
    ]