Передача параметра в правило парсера в GUnit - PullRequest
1 голос
/ 20 июля 2011

У меня есть правило синтаксического анализа в 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

Я могу найти очень мало документации по GUnit, кроме этой страницы,но это не охватывало это.

1 Ответ

1 голос
/ 20 июля 2011

Глядя на официальные документы, кажется, что вы не можете предоставить параметр для тестируемых правил, что приводит к исключению:

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

, поскольку tincture ожидает Tinctures в качестве параметра.

Вы можете продолжать использовать gUnit и использовать JUnit для тех правил, которые содержат параметры. Но смешивать gUnit и JUnit немного беспорядочно, IMO, поэтому лично я просто использую JUnit для всех своих тестов ANTLR.

Вы также можете взглянуть на aunit , сторонний набор для тестирования модулей ANTLR. Я не рассматривал это подробно, и, похоже, в документации не хватает, но, тем не менее, это может быть то, что вы ищете.

...