我正在使用HUnit编写一些测试,我想断言特定函数在给定某个输入的情况下抛出异常.我找不到提供所需功能的断言功能.有人知道测试框架吗?
基于SO问题13350164 如何在Haskell中测试错误?,我正在尝试编写一个单元测试,断言给定无效输入,递归函数引发异常.我采用的方法适用于非递归函数(或者当第一次调用引发异常时),但是一旦异常发生在调用链中,断言就会失败.
我已经阅读了问题6537766 Haskell错误处理方法的优秀答案,但不幸的是,对于我的学习曲线的这一点,建议有点过于通用.我的猜测是这里的问题与懒惰评估和非纯测试代码有关,但我很欣赏专家的解释.
在这种情况下(例如Maybe或者Either),我应该采用不同的方法来处理错误,还是在使用这种风格时是否有合理的方法使测试用例正常工作?
这是我提出的代码.前两个测试用例成功,但第三个测试用例失败了"Received no exception, but was expecting exception: Negative item".
import Control.Exception (ErrorCall(ErrorCall), evaluate)
import Test.HUnit.Base ((~?=), Test(TestCase, TestList))
import Test.HUnit.Text (runTestTT)
import Test.HUnit.Tools (assertRaises)
sumPositiveInts :: [Int] -> Int
sumPositiveInts [] = error "Empty list"
sumPositiveInts (x:[]) = x
sumPositiveInts (x:xs) | x >= 0 = x + sumPositiveInts xs
| otherwise = error "Negative item"
instance Eq ErrorCall where
x == y = (show x) == …Run Code Online (Sandbox Code Playgroud)