2017-01-27 3 views
0

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에 대한 사례와 다른 클래스를 작성합니다. 어떻게해야합니까?

+0

테스트 할 내용을 확인하십시오 :). 그래서 클래스의 상속 된 구현을 사용하고 호출 된 것을 어떻게 든 (리스트, 로그, ...) 로그 할 수 있습니다. – wumpz

+0

또는 조롱 프레임 워크를 사용하여 방문자를 테스트 할 수도 있습니다. – wumpz

+0

사실 나는 해결책을 찾아 냈습니다. Visitor 인터페이스의 구현 클래스를 작성하는 동안 간단한 버퍼 또는 컨테이너 객체가 오버로드 된 생성자 내부에서 초기화되어야합니다. 이렇게하면 모든 방문 방법에서 발생하는 모든 세부 정보를 기록 할 수 있습니다. – Tony

답변

0

내 의견 외에도이 link을 살펴보십시오. 해결책을 찾아 낼 수 있습니다.

buffer 변수는 사용중인 상위 메소드에서 ExpressionDeParser의 오버로드 된 생성자로 전달할 수 있으며 로그 할 세부 사항은 buffer을 사용하여 완료 할 수 있습니다.

관련 문제