【发布时间】:2012-10-19 18:45:09
【问题描述】:
我想为 Parsec 解析器编写一个测试。下面是解析器和数据结构的例子:
data Event = Event { keyEvent :: String }
deriving Show
parseKey :: Parser Event
parseKey = do
char '<'
k <- many1 (letter <|> digit <|> oneOf "_")
char '>'
return $ Event k
我知道我需要检查parse = parse . pretty . parse 属性。但是我应该如何生成正确和不正确测试用例呢?一般来说,我应该如何为给定的BNF 生成测试用例?我知道instance Arbitrary,但没有太多帮助。
如果您为这个简单的解析器提供一个注释良好的生成器示例,我将不胜感激。
【问题讨论】:
-
对于正确的测试用例,检查
id = parse . pretty是否足够好? (另外,oneOf "_" == char '_') -
我认为这就足够了,是的! (而且,第一个版本要奇怪得多)。
-
@dbaupp:我考虑过这个,不,考虑一个简单的例子,当解析器中有
spaces或其他可跳过的字符,那么产生的结果会有所不同。额外的parse会有所帮助。
标签: haskell parsec quickcheck