相关疑难解决方法(0)

在任何Haskell测试框架中是否存在assertException?

我正在使用HUnit编写一些测试,我想断言特定函数在给定某个输入的情况下抛出异常.我找不到提供所需功能的断言功能.有人知道测试框架吗?

testing haskell

14
推荐指数
2
解决办法
1486
查看次数

Haskell异常和单元测试

基于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)

haskell unit-testing exception

3
推荐指数
1
解决办法
523
查看次数

标签 统计

haskell ×2

exception ×1

testing ×1

unit-testing ×1