ビジター パターンを利用するかなり複雑な antlr4 文法があります。訪問者の一部をテストしたいのですが。個々の訪問ルールをテストする良い方法は何ですか?
私の訪問者には、テストしたい次のようなルールがたくさんあります。
@Override
public Object visitQux(ExclParser.QuxContext ctx) {
return visitChildren(ctx);
}
そして、私のテストコードは基本的に次のとおりです。
PrintStream ps = new PrintStream(stdError, false /* autoFlush */, "UTF-8")
ANTLRInputStream input = new ANTLRInputStream(is);
MyLexer lexer = new MyLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
MyParser parser = new MyParser(tokens);
parser.removeErrorListeners();
MyErrorListener errorListener = new MyErrorListener(ps, filename);
parser.addErrorListener(errorListener);
MyVisitor visitor = new MyVisitor();
visitor.setParser(filename, parser, errorListener);
ParseTree tree = parser.qux(); // <--- This is the line I want to vary.
Object result = visitor.visit(tree);
assertThat(describeExpectation(), result, equalTo(this.expectedOutput));
理想的には、パラメーター化されたテストを使用して任意の訪問者をテストできるようにします。しかし、アクセスしたい解析ツリー (parser.qux) を取得するために、parser.qux() は静的ではないため、テーブルで qux() のバリアントを指定できません。
何かご意見は?