Как выполнить юнит-тестирование посетителей в 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) {}
}

Затем я называю это в другом классе следующим образом:

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 и других классов, реализующих интерфейсы Visitor, предоставленные JSqlparser. Как я должен это делать?

1 ответ

Решение

В дополнение к моему комментарию посмотрите на эту ссылку. Вы можете найти решение.

buffer переменная может быть передана перегруженному конструктору ExpressionDeParser из родительского метода, где он используется, и тогда любую деталь, которую мы хотим зарегистрировать, можно сделать, используя buffer,

Другие вопросы по тегам