2012-04-19 7 views
1

純粋なJRXML(カスタムJavaコードは含まれません)を使用していくつかのレポートを実装するタスクがあります。レポートはSQLクエリのみを使用して生成することができ(カスタムコードは不要)、JasperReportサーバー(Javaコードなし=カスタムデータソースとライブラリをインストールする必要はありません)を展開するのは簡単です。ジャスパーレポート。 JRXMLテンプレートからのSQLクエリのテスト

ただし、これらのレポートのテストを自動化する必要があります。 データ検索(SQLクエリ)とレポートレンダリングのテストを分割することにしました。

SQLをテストするために、JRXMLテンプレートから実際のクエリを抽出して、今後のテストのメンテナンスを改善したいと考えています。

レポートクエリを手動でテストにコピーし、文字列置換機能を使用してすべてのパラメータを実際の値に手動で置き換えることができます。しかし、この場合、テストとJRXMLテンプレートの2つの場所で同じクエリを手動で維持する必要があります。そして私たちはそれを避けたいと思います。

JRXMLから取得されたSQLクエリの問題は、依然としてJasperReport固有のプレースホルダが含まれていることです。ような何か:これまでのところ私たちは、おそらく使用できる何かを見つけた

SELECT name, department FROM employees WHERE employee_id = $P{employeeId} 

this threadを参照してください)。しかし、それでもJasperReportsライブラリが実装するロジックの部分的な複製が必要です(JRQueryChunksを処理するロジックを複製し、クエリにパラメータ値を追加する必要があります)。

私はJRXMLからSQLをテストするより良い方法がありますか?

ありがとうございます!

答えて

0

Jasper Serverを使用してレポートをデプロイする場合、Jasper APIを使用してデプロイされたJRXMLを抽出し、そこからクエリとパラメータデータ型を取り除き、クエリパラメータをいくつかのテストパラメータ($ P {xxx}と$ P!{xxx})はあなたのテストを行い、行く準備ができています。

<parameter name="employeeId" class="java.lang.Integer"> 
    <defaultValueExpression><![CDATA[new java.lang.Integer(11)]]></defaultValueExpression> 
</parameter> 
<queryString> 
    <![CDATA[SELECT name, department FROM employees 
       WHERE employee_id = $P{employeeId};]]> 
</queryString> 

あなたは、あなたが、少なくともデータ型を持っているし、テスト値を作成することができますデフォルト値を持っていない場合、あなたも、あなたのテストのものを使用することができ、あなたのパラメータのデフォルト値を使用している場合それに基づいて。

これが役に立ちます。

+0

お寄せいただきありがとうございます。私が理解していれば、JRXからパラメータとSQLを抽出することを提案しています(例:JasperDesign.getMainDataSet()。getQuery())。私たちは全く同じアイデアを持っています。私の質問は、Jasperが既にこの機能を備えている場合、ホイールの再作成(コード内のSQLクエリの解析)を避けることができるということです。 –

関連する問題