我想为一套 Parsec 解析器编写测试。这是我想用 QuickCheck 测试的解析器的一个简单示例:
identifier = do
c <- letter
cs <- many (alphaNum <|> oneOf identSymbols)
skipSpaces
return $ Ident $ c:cs
因此,理想情况下,我希望 QuickCheck 生成有效的标识符并确保我得到正确的结果,以及生成无效的标识符并确保它们返回ParseError
. 是否有任何实用程序可以使这种事情变得更容易?有没有办法可以“反向运行我的解析器”来生成这样的输入?
一般而言,这个解析器的一套好的 QuickCheck 测试应该是什么样子的?在某种程度上,似乎我基本上必须在 QuickCheck 中复制解析器的逻辑才能实现彻底的测试。这真的是一个好主意,或者这可能是像 HUnit 这样更传统的工具比 QuickCheck 更适合的情况?