0
JSQLparserのVisitorを実装してSQLクエリを解析しました。コードは絶対にうまく動作しています。私はそれらの訪問者の単体テストを行う方法がわかりません。たとえば、私は、次のSQL文を持って次のようにJsqlparserで訪問者の単体テストを行う方法は?
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) {}
}
は、その後、私は別のクラスでそれを呼び出しています:
Select a.a1, a.a2 from foo as a
私はStatementVisitorインタフェースを実装しているし、私のコードはこのように書き、それを解析するには
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によって与えられたビジターインタフェースを実装する他のクラスのユニットテストケースを書きたいです。私はどうすればいいのですか?
あなたが期待しているものをテストしてください:)。だからあなたはクラスの継承された実装を使用して何とか(list、log、...)呼び出されたものをログすることができます。 – wumpz
また、訪問者をテストするために模擬フレームワークを使用することもできます。 – wumpz
実際に私は解決策を見つけました。任意のVisitorインターフェイスの実装クラスを記述している間、単純なバッファまたはコンテナオブジェクトは、そのオーバーロードされたコンストラクタ内で初期化する必要があります。これは、訪問方法のいずれかで起こっているすべての詳細を記録することができます。 – Tony