ANTLR4语法测试方法

时间:2019-05-09 14:08:52

标签: python-3.x antlr4

我正在为封闭的编程语言编写antlr4语法。我将用python编写的应用程序代码。

现在,我想针对语言的可能组合对所有语法规则进行单元/集成测试。对于单元测试,我正在考虑以下方法。如果有人从事过类似的工作,您能给我指导哪种方法合适吗?

  1. 具有很多可能组合的文件及其各自的树输出在另一个文件中。因此在python中,我将读取生成解析树的所有文件,然后将树结果与输出文件进行比较。
  2. 对于每个创建一个测试文件的语法规则,要编写许多方法,这些方法将以字符串形式输入,并使树输出与字符串相匹配。但是我认为对于支持多种组合的规则而言,这将变得太复杂了。它将太多的测试函数调用以及创建解析树的过程。
  3. 在此方法中,它与方法2相似,但不是将树字符串与输出进行比较,而是要检查语法中的每个标记/符号是否根据期望被识别。但是在这里,支持多个选项的规则会很复杂,因为我需要检查通过的选项,然后再次进行相应的测试。

对此将提供任何帮助。

1 个答案:

答案 0 :(得分:0)

我将使单元测试保持简单(以便您可以编写很多单元测试):解析应该期望0个错误(或者应该期望n个错误,具体取决于您的测试)。

当然,您可以打印出一些内容,以帮助您快速分析单元测试失败的原因。

我的观点是,您应该在编写规则的同时编写输入文件(不要先编写所有语法,然后再编写所有单元测试)

在使用Junit时,我发现与Reflections一起使用的参数化测试非常有用:我将所有测试输入文件放在一个folder中,只需要一个测试file。每次您添加或修改规则或测试文件时,都会播放所有junit测试,而无需更新它们。