有没有办法生成单元测试来测试我的语法

时间:2015-12-17 15:52:22

标签: antlr grammar antlr4

我使用antlr4创建了我的语法,但我想测试robustess
    是否有自动工具或快速做到这一点的好方法

谢谢:)

3 个答案:

答案 0 :(得分:2)

我发现为语法创建单元测试的唯一方法是从给定语言的书面规范中创建许多示例。这既不快也不完整,但我没有别的办法。

你可能很想直接从语法中创建测试用例(为此编写工具并不难)。但想一想这个。那你会测试什么?除非您使用早期版本的语法生成的测试用例,否则您的单元测试将始终成功。

一个特例是当你为另一个解析器生成工具已经有语法的语言编写语法时。在这种情况下,您可以使用原始语法生成测试用例,然后您可以使用它来测试新语法的符合性。

但是,我不知道任何可以为您生成测试用例的工具。

答案 1 :(得分:0)

由于很难找到ANTLR的真实单元测试,因此我写了2篇文章:

Lexer测试检查是否读取了给定的文本并将其转换为预期的Token序列。例如,这有助于避免歧义错误。

一个 Parser测试接受一个令牌序列(即,它从小部分开始),并检查令牌序列是否遍历了预期的规则(java方法) 。

答案 2 :(得分:0)

鲍里斯·贝泽尔(Boris Beizer)在他的《软件测试技术》一书中谈到了“语法测试”这一主题。基本思想是(在思想上或实际上)采用语法并将其表示为语法图(又称铁路图)。对于系统测试,将覆盖此图:输入匹配元素的好情况,但每个节点的坏情况。迭代和递归调用将像循环一样进行处理,也就是说,在最大迭代次数(即各个句法元素的出现)之上,零,一,二,一小于max,max的情况。