[英]Propagating errors to cause HUnit tests to fail
我正在為功能eval :: Wff -> Assignment -> Maybe Bool
編寫HUnit測試。 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"
兩項測試均通過。 但是,該測試不是很可靠。 如果我使用wffStr
的更復雜的值對其進行wffStr
但輸入錯誤,則模式Right wff
將失敗,因為parse
將返回Left String
而不是Rigth Wff
。 這會導致測試運行中止,而我寧願因為一些不好的測試而失敗,而其余的則是實際結果。 如何修改當前結構,使錯誤傳播導致測試失敗,而不是一起放棄?
我對HUnit一無所知,但是:您能告訴它解析失敗時該怎么做嗎?
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]
{- ... -}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.