SQL 쿼리를 구문 분석하기 위해 JSqlparser의 Visitor를 구현했습니다. 코드가 완벽하게 작동합니다. 그 방문자들을위한 단위 테스트를하는 방법을 잘 모르겠습니다.Jsqlparser에서 방문자의 단위 테스트를 수행하는 방법은 무엇입니까?
Select a.a1, a.a2 from foo as a
내가 StatementVisitor 인터페이스를 구현하고 내 코드는 다음과 같이 간다 구문 분석하려면 : 예를 들어, 나는 다음과 같은 SQL 문이
다음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);
나는 JSqlparser에 의해 주어진 방문자 인터페이스를 구현하는 단위 테스트 내 StmntVisitorImpl, SelectVisitorImpl에 대한 사례와 다른 클래스를 작성합니다. 어떻게해야합니까?
테스트 할 내용을 확인하십시오 :). 그래서 클래스의 상속 된 구현을 사용하고 호출 된 것을 어떻게 든 (리스트, 로그, ...) 로그 할 수 있습니다. – wumpz
또는 조롱 프레임 워크를 사용하여 방문자를 테스트 할 수도 있습니다. – wumpz
사실 나는 해결책을 찾아 냈습니다. Visitor 인터페이스의 구현 클래스를 작성하는 동안 간단한 버퍼 또는 컨테이너 객체가 오버로드 된 생성자 내부에서 초기화되어야합니다. 이렇게하면 모든 방문 방법에서 발생하는 모든 세부 정보를 기록 할 수 있습니다. – Tony