0

我已经实现了 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) {}
}

然后我在另一个类中调用它,如下所示:

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 和其他实现 JSqlparser 给出的访问者接口的类编写单元测试用例。我该怎么做?

4

1 回答 1

0

除了我的评论,看看这个链接。你可以想办法解决。

buffer变量可以从使用它的父方法传递给重载的构造函数,然后ExpressionDeParser我们想要记录的任何细节都可以使用buffer.

于 2017-01-31T14:08:29.760 回答