Unit testing 传播错误以导致HUnit测试失败
我正在为函数编写HUnit测试Unit testing 传播错误以导致HUnit测试失败,unit-testing,haskell,hunit,Unit Testing,Haskell,Hunit,我正在为函数编写HUnit测试eval::Wff->Assignment->mayboolWff是一种自定义数据类型,是布尔表达式简化子集的抽象解析树: data Wff = Var Name | Not Wff | Or Wff Wff deriving (Eq) 而Assignment是关联列表的类型别名,它为Wff中的每个变量提供布尔值: type Assignment = [(Name, Bool)] 我当前的测试如下所示: te
eval::Wff->Assignment->maybool
Wff
是一种自定义数据类型,是布尔表达式简化子集的抽象解析树:
data Wff = Var Name
| Not Wff
| Or Wff Wff
deriving (Eq)
而Assignment
是关联列表的类型别名,它为Wff
中的每个变量提供布尔值:
type Assignment = [(Name, Bool)]
我当前的测试如下所示:
testEval :: Test
testEval = "Test eval"
~: TestList $ zipWith (\e (Just a) -> e ~=? a) expected (eval wff <$> assignments)
where expected = [True, False]
assignments = [[('p', True)], [('p', False)]]
Right wff = parse wffStr
wffStr = "p"
testEval::Test
testEval=“测试评估”
~:TestList$zipWith(\e(仅a)->e~=?a)预期(评估wff分配)
其中预期=[正确,错误]
赋值=[('p',True)],[('p',False)]]
右wff=解析wffStr
wffStr=“p”
这两项测试都通过了。然而,该测试并不十分可靠。如果我为
wffStr
修改了一个更复杂的值,但输入了一个打字错误,模式Right wff
将失败,因为parse
将返回一个Left String
,而不是Right wff
。这会导致测试运行中止,我更愿意看到一些错误测试的失败和其他测试的实际结果。如何修改当前结构,使错误传播,导致测试失败,而不是一起中止?我对它一无所知,但是:你能告诉它当解析失败时该怎么做吗
testEval = case parse wffStr of
Left _ -> {- use HUnit's functions to make a failing test case -}
Right wff -> "Test eval" ~: TestList $ {- ... -}
where expected = [True, False]
{- ... -}
这看起来是一个令人满意的解决方案。谢谢你的建议。我的问题可能更多的是混合单子,而不是混合单子。也许我需要找到一种方法来重新表述我的问题,以强调我正在使用一个
字符串
单子以及一个可能
单子列表。我肯定有一些很好的方法来处理这个问题,但我还没有找到。