2011-07-19 63 views
1

在ANTLR中有一个采用参数的解析器规则。在GUnit中将参数传递给解析器规则

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

看着官方文档,好像你不能给你测试的规则提供了一个参数,造成了异常:

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

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

您可以继续使用gUnit,并将JUnit用于包含参数的规则。但混合gUnit和JUnit有点麻烦,IMO,所以我个人简单地使用JUnit来进行我所有的ANTLR测试。

你也可以看看第三方ANTLR单元测试套件aunit。我没有详细看过它,它似乎缺少文档,但仍然可能是你要找的东西。

+0

我快速浏览了aunit,但它缺少文档,所以没有真正跟踪发生的事情。正如你所说,我可能只是使用JUnit来测试ANTLR。谢谢 – luketorjussen