java - 将参数传递给 GUnit 中的解析器规则

标签 java antlr gunit

我在 ANTLR 中有一个带有参数的解析器规则。

tincture [Tinctures tinctures] returns [Tincture tincture]   
    :   { String tinctureName = ""; }
    (   COLOUR { tinctureName = $COLOUR.text; }
    |   METAL  { tinctureName = $METAL.text; }
    |   FUR    { tinctureName = $FUR.text; }
    )
    {
        try {
            $tincture = tinctures.getTincture(tinctureName);
        } catch (UnknownTinctureException e) {
            throw new MyRecognitionException("Unknown tincture found.", e);
        }
    }
    ;

如何在 GUnit 中为此编写测试?

我已经成功地为我的 Lexer 规则编写了测试,因为它们没有任何参数。 如果我写以下内容,我会得到“java.lang.NoSuchMethodException:mypackage.BlazonParser.tincture()”

tincture
    :   "gules"             OK
        "sable"             OK
        "blah"              FAIL

除了 this 之外,我能找到很少关于 GUnit 的文档。页,但没有涵盖这一点。

最佳答案

查看官方文档,似乎您无法为您测试的规则提供参数,从而导致异常:

java.lang.NoSuchMethodException: mypackage.BlazonParser.tincture()

因为 tincture 需要一个 Tinctures 作为参数。

您可以继续使用 gUnit,并将 JUnit 用于那些包含参数的规则。但在我看来,混合 gUnit 和 JUnit 有点困惑,所以就个人而言,我只是使用 JUnit 进行所有 ANTLR 测试。

您还可以查看aunit ,第 3 方 ANTLR 单元测试套件。我没有详细看过它,而且似乎缺乏文档,但它仍然可能是您正在寻找的内容。

关于java - 将参数传递给 GUnit 中的解析器规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6754572/

相关文章:

java - 为什么我的 ANTLR4 语法中的这一添加会破坏不相关的规则替代方案?

java - ANTLR4 生成不正确的 java 代码

java - 在windows java中获取下载文件夹的路径

Java Junit4 支持扩展基类

ANTLR如何使用以相同的开头的词法分析器规则?

java - 如何将 GUNIT 与 MAVEN 一起使用?

unit-testing - 模拟正在单元测试的服务类中的方法

java - 银行账户分配

java - 降序排列 ArrayList