如何在 Jsqlparser 中对 Visitors 进行单元测试?
How to do unit testing of Visitors in Jsqlparser?
我已经实现了 JSqlparser 的访问者来解析 SQL 查询。代码工作得很好。我不确定如何为这些访问者进行单元测试。例如,我有以下 sql 语句:
Select a.a1, a.a2 from foo as a
为了解析它,我实现了 StatementVisitor 接口,我的代码是这样的:
public class StmntVisitorImpl implements StatementVisitor {
@Override
public void visit(Select select) {
LOG.debug("Begin Select visit : "+select.toString());
SelectVisitor selectVisitor = new SelectVisitorImpl();
select.getSelectBody().accept(selectVisitor);
if(select.getWithItemsList()!=null && !select.getWithItemsList().isEmpty()){
select.getWithItemsList().stream()
.forEach(wth -> wth.accept(selectVisitor));
}
}
@Override
public void visit(Delete delete) {}
@Override
public void visit(Update update) {}
@Override
public void visit(Insert insert) {}
@Override
public void visit(Replace replace) {}
@Override
public void visit(Drop drop) {}
}
然后我在另一个class中调用它如下:
String sql = "Select a.a1, a.a2 from foo as a";
CCJSqlParserManager parserManager = new CCJSqlParserManager();
StatementVisitor statementVisitor = new StmntVisitorImpl ();
Statement sqlStatement = parserManager.parse(new StringReader(sql));
sqlStatement.accept(statementVisitor);
我想为我的 StmntVisitorImpl、SelectVisitorImpl 和其他 classes 编写单元测试用例,它们实现了 JSqlparser 提供的 Visitor 接口。我应该怎么做?
除了我的评论,看看这个 link。
你可以想办法解决。
buffer
变量可以从使用它的父方法传递给 ExpressionDeParser
的重载构造函数,然后我们可以使用 [=10 完成我们想要记录的任何细节=].
我已经实现了 JSqlparser 的访问者来解析 SQL 查询。代码工作得很好。我不确定如何为这些访问者进行单元测试。例如,我有以下 sql 语句:
Select a.a1, a.a2 from foo as a
为了解析它,我实现了 StatementVisitor 接口,我的代码是这样的:
public class StmntVisitorImpl implements StatementVisitor {
@Override
public void visit(Select select) {
LOG.debug("Begin Select visit : "+select.toString());
SelectVisitor selectVisitor = new SelectVisitorImpl();
select.getSelectBody().accept(selectVisitor);
if(select.getWithItemsList()!=null && !select.getWithItemsList().isEmpty()){
select.getWithItemsList().stream()
.forEach(wth -> wth.accept(selectVisitor));
}
}
@Override
public void visit(Delete delete) {}
@Override
public void visit(Update update) {}
@Override
public void visit(Insert insert) {}
@Override
public void visit(Replace replace) {}
@Override
public void visit(Drop drop) {}
}
然后我在另一个class中调用它如下:
String sql = "Select a.a1, a.a2 from foo as a";
CCJSqlParserManager parserManager = new CCJSqlParserManager();
StatementVisitor statementVisitor = new StmntVisitorImpl ();
Statement sqlStatement = parserManager.parse(new StringReader(sql));
sqlStatement.accept(statementVisitor);
我想为我的 StmntVisitorImpl、SelectVisitorImpl 和其他 classes 编写单元测试用例,它们实现了 JSqlparser 提供的 Visitor 接口。我应该怎么做?
除了我的评论,看看这个 link。 你可以想办法解决。
buffer
变量可以从使用它的父方法传递给 ExpressionDeParser
的重载构造函数,然后我们可以使用 [=10 完成我们想要记录的任何细节=].