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

时间:2011-07-19 21:50:17

标签: 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的文档,但它没有涵盖这一点。

1 个答案:

答案 0 :(得分:1)

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

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

因为tincture需要Tinctures作为参数。

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

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

相关问题