Der*_*urn 7 testing haskell parsec quickcheck
我想为一套Parsec解析器编写测试.这是我想用QuickCheck测试的解析器的一个简单示例:
identifier = do
c <- letter
cs <- many (alphaNum <|> oneOf identSymbols)
skipSpaces
return $ Ident $ c:cs
Run Code Online (Sandbox Code Playgroud)
所以,理想情况下,我希望QuickCheck生成有效的标识符,并确保我得到正确的结果,以及生成无效的标识符并确保它们返回ParseError.是否有任何实用程序可以使这种事情变得更容易?有没有办法可以"反向运行我的解析器",可以说,生成这样的输入?
一般来说,这个解析器的一套优秀的QuickCheck测试是什么样的?在某种程度上,似乎我基本上必须在QuickCheck中复制解析器的逻辑以实现彻底的测试.这真的是一个好主意,或者这可能是像HUnit这样的传统工具比QuickCheck更合适的情况吗?
Don*_*art 13
一般来说,解析器的反向是一个漂亮的打印机,与解析器的随机输入相反,是AST的随机漂亮打印.
因此,按照通常的方法为您的AST定义一个Arbitrary实例,它驱动随机格式良好的语法片段.混合使用一些错误字符作为包装来测试错误处理.
也可以看看: