我有一个相当复杂的 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),我不能在表中指定任何 qux() 的变体,因为 parser.qux() 不是静态的。
有什么想法吗?