我在 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/