出力済みの帳票をテストする
製品開発担当の大です。こんにちは。
帳票の開発において頭を悩ませる問題のひとつに「出力した帳票をいかにテストするか」というものがあります。紙に出力したものもPDFも人力の目視でのテストになりがちです。数が少ないうちはなんとかなっても、数が徐々に増え保守期間が長くなってくるとコストが嵩んできますよね…
今回は、CoReports for Java Ver.4に追加されたJUnit5用アサーションを使用して、できるだけ機械的に出力済みの帳票をテストする方法を考えていきたいと思います。
テストの準備
最初にJUnit5とシーオーリポーツのjarをプロジェクトに追加し、テストのimportに以下を記述します。
import static jp.co.hos.coreports.CrAssertions.*;
import static org.junit.jupiter.api.Assertions.*;
これで準備OKです!
帳票のプロパティをテストする
まずは帳票のページ数が正しいかどうかを確認してみます。
@Test
public void ドキュメントのページ数が正しいか確認する() {
assertDocument(TEST_DOC, doc -> assertEquals(5, doc.getTotalPageCount()));
}
TEST_DOCにはシーオーリポーツドキュメント(rsi/rsx)を指定します。ファイルのパスの文字列/File/Path/InputStream/CrDocument等で指定可能です。実行してみると、5ページ出力されていると期待していたのに、4ページしかなかったことがわかりますね。
プログラムを修正して再びテストすると、今度は通りました!
帳票の内容をテストする
もっと詳しく、帳票のページやオブジェクトを指定して帳票の内容を確認することもできます。
@Test
public void ページ内容を確認する() {
assertDocument(TEST_DOC, doc -> {
// 2ページ目のフィールド「入金_合計金額」の値が「844920」であることを確認
assertEquals("844920", doc.getCrPage(2).getCrForm().getField("入金_合計金額").getData());
// 3ページ目のフィールド「納品_担当者」の値が「田中」であることを確認
assertEquals("田中", doc.getCrPage(3).getCrForm().getField("納品_担当者").getData());
});
}
この例のようにassertEqualsを続けて書くことも出来ますが、その場合最初に失敗したところでテストが終わってしまいます。JUnit5のassertAllを使えば、すべての失敗した箇所の情報を得ることができます。
@Test
public void ページ内容を確認する() {
assertDocument(TEST_DOC, doc -> {
assertAll(
// 2ページ目のフィールド「入金_合計金額」の値が「844920」であることを確認
() -> assertEquals("844920", doc.getCrPage(2).getCrForm().getField("入金_合計金額").getData()),
// 3ページ目のフィールド「納品_担当者」の値が「田中」であることを確認
() -> assertEquals("田中", doc.getCrPage(3).getCrForm().getField("納品_担当者").getData())
);
});
}
他の帳票と比較する
出力した帳票を他の帳票と比較することも出来ます。このように一見同じように見えるドキュメントでも…
@Test
public void ドキュメントを比較する() {
assertDocumentEquals(TEST_DOC1, TEST_DOC2);
}
テストしてみると値が違っている箇所がありました!
たとえば、回帰テストで正しい出力結果と比較して、デグレードが発生していないか自動でチェックするといった使い方も可能ですね!
最後に
こちらからダウンロードできる体験版でもこの機能を試してみることが出来ます。ぜひお試しください!