1

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

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

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

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

JRXML から取得した SQL クエリの問題は、まだ JasperReport 固有のプレースホルダーが含まれていることです。何かのようなもの:

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

これまでのところ、おそらく使用できるものを見つけました (このスレッドを参照してください)。ただし、JasperReports ライブラリが実装するロジックの部分的な複製が必要です (JRQueryChunks を処理し、パラメーター値をクエリに追加するためのロジックを複製する必要があります)。

それを行うためのより良い方法はありますか (JRXML から SQL をテストすることを意味します)?

ありがとう!

4

1 に答える 1

0

Jasper サーバーを使用してレポートをデプロイする場合は、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>

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

これが役立つことを願っています。

于 2012-04-19T17:18:31.757 に答える