0

function の HUnit テストを書いていますeval :: Wff -> Assignment -> Maybe BoolWffブール式の単純化されたサブセットの抽象解析ツリーであるカスタム データ型です。

data Wff = Var Name
         | Not Wff
         | Or Wff Wff
         deriving (Eq)

およびAssignmentは、 a の各変数にブール値を与える連想リストの型エイリアスです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"

構築された両方のテストに合格します。ただし、このテストはあまり堅牢ではありません。のより複雑な値を変更してタイプミスをすると、 が aではなくa を返すためwffStr、パターンRight wffは失敗します。これにより、テストの実行が中止され、いくつかの悪いテストで失敗し、残りの実際の結果が得られます。現在の構造を変更して、エラーが伝播し、すべてを中止するのではなく、テストが失敗するようにするにはどうすればよいですか?parseLeft StringRigth Wff

4

1 に答える 1

1

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]
          {- ... -}
于 2013-09-30T04:14:09.283 に答える