我在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的文档,但它没有涵盖这一点。
答案 0 :(得分:1)
查看官方文档,您似乎无法为您测试的规则提供参数,导致异常:
java.lang.NoSuchMethodException: mypackage.BlazonParser.tincture()
因为tincture
需要Tinctures
作为参数。
您可以继续使用gUnit,并将JUnit用于包含参数的规则。但混合gUnit和JUnit有点混乱,IMO,所以个人而言,我只是使用JUnit来进行所有的ANTLR测试。
您还可以查看第三方ANTLR单元测试套件aunit。我没有详细看过它,它似乎缺乏文档,但仍然可能是你正在寻找的。 p>