2011-07-19 13 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()」を取得私は離れてthisページからGUnit周りはほとんどのドキュメントを見つけることができますが、それはこれをカバーしていない

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

を。

答えて

1

は、公式ドキュメントを見ると、あなたが例外の原因となる、あなたがテストしたルールにパラメータを提供することはできませんようだ:tincture以来

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

がパラメータとしてTincturesを期待しています。

gUnitを引き続き使用し、パラメータを含むルールにはJUnitを使用できます。しかし、gUnitとJUnitを混在させるのはちょっと面倒ですが、個人的には、私はすべてのANTLRテストにJUnitを使用しています。

また、サードパーティのANTLRユニットテストスイートであるaunitを見ることもできます。私はそれを詳しく見ていないし、文書化に欠けているようだが、それでもあなたが探しているものである可能性がある。

+0

私はaunitをすばやく見ていましたが、ドキュメントに欠けていたので、実際に何が起こっていたのかは分かりませんでした。私はあなたが言ったようにANTLRをテストするためにJUnitを使用するかもしれません。ありがとう – luketorjussen

関連する問題