「Web開発」カテゴリーアーカイブ

djUnitで戻り値なしのメソッドを無効化する方法

djUnitでテストする際に、一部のメソッドは特に実行する必要はないけどそのメソッドの処理はスルーさせたいケースがたまに発生します。こういう場合にはdjUnitのaddReturnValue機能を活用する事でそのメソッドの処理を無効化する事が出来ます。
通常addReturnValueはメソッドの戻り値を好みの値に変更する際に使用しますが、戻り値なし(void)のメソッドの時には通常使用しません。それでも戻り値なしのメソッドをaddReturnValueで指定するとそのメソッドが実行されずメソッドの処理を無効化する事が出来ます。
ただし、この方法は戻り値なし(void)のメソッドにしか活用出来ませんのでご注意下さい。

Javaソース

djUnitサンプル

コンソール

    addReturnValueを使用しないでテストした場合
    addReturnValueを使用してテストした場合

djUnitで複数回実行されるメソッドの返却値を変更する方法

djUnitでメソッドの返却値を好みのものに変更する場合は「addReturnValue」メソッドを使用しますが、
同一メソッドを複数回使用していてそれぞれ別々の戻り値に変更したい場合には「setReturnValueAt」メソッドを使用します。

Javaソース


djUnitサンプル

実行結果(コンソール)

djUnitでメソッドの返却値を好みのものに変更する方法

djUnitを使用する上での最大の利点と言っても良いのがVirtual Mock Objects(仮想モックオブジェクト)が使用出来る事です。
このVirtual Mock Objectsを使用すると作成したクラスでUtilクラスなどのメソッドを使用している場合、使用しているメソッドの戻り値を自由に変更する事が可能となります。
djUnitでメソッドの返却値を好みのものに変更する場合は「addReturnValue」メソッドを使用します。
「addReturnValue」メソッドの使用タイミングとしては、作成したクラスで使用している共通クラスのメソッドなどが未完成の場合でスタブが必要になるケースなどが考えられます。

Javaソース

djUnitサンプル

JDKとJREの違い

Javaの勉強をしていると最初の方に学習する事ではあるのですが、ふと違いとは?と考えるとjavaの実行環境と開発環境の違い位の認識しかなかったので整理しておこうと思います。

JDK

  • 「Java Development Kit」の略称。
  • Javaでプログラムを開発する際に必要。
  • ソフトウェア開発キット(SDK)を拡張したサブセット。
  • フリーソフトウェア。

JRE

  • 「Java Runtime Environment」の略称。
  • Javaで作成されたプログラムを実行する場合に必要。

Web開発でApache POIを使用する際に注意する事

Web開発では帳票をExcelで出力する際に「Apache POI」がよく使用されています。
ただ「Apache POI」を使用する場合、システム的な制限やリソースなど事前に注意しておくべき点があるのでメモしておきます。

Apache POIの問題点

  • 「xlsx」形式のファイルの場合、リソースを大量に消費する
    POIを使用する場合、出力帳票のテンプレートファイルを用意して帳票を出力するケースが多いと思われます。このテンプレートファイルの拡張子がEXCEL2007以降の形式「xlsx」で用意されている場合、POIでは一旦そのファイルを全てメモリに読み込ませる為により多くのリソース(メモリ)を消費する事になります。
  • セル結合処理は非常に遅い
    POIでEXCEL操作する場合、セル結合処理は非常に処理速度が遅くなるので帳票のフォーマットを決める場合はセル結合しないフォーマットで設計しておいた方が懸命です。

UTF-8のBOM有り、BOM無しの違いとは

エディタなどで文字コードを指定する際「BOM有り」と「BOM無し」という選択肢があります。この「BOM」とは何かをまとめておきます。

BOMとは?

    まずBOMとは「バイトオーダーマーク (byte order mark) 」の略語となります。
    バイトオーダーマークとはUnicode形式のデータを「ビッグエンディアン」、「リトルエンディアン」のどちらで保存しているのかという情報をデータの先頭に付与する情報のことです。
    UTF-8の場合、先頭に3バイトのバイナリデータ「0xEF 0xBB 0xBF」が付与されたものが「BOM有り」の状態。付与されていない場合が「BOM無し」の状態となります。

どういう場合に「BOM有り」、「BOM無し」を使い分けるか?

  • Unicodeの規格ではBOMは推奨していません。
  • Web制作などでHTMLやPHPなどをエディタで編集する際はBOM無しを選択した方が一般的には問題は起こりにくいので無難です。但し、必ずしもBOM無しが正解というわけではないのは認識しておきましょう。
  • 「Microsoft Office Excel」などはBOMがないとUTF-8だと認識できず、種々の問題が起こる。
  • 基本的にはアプリケーション側でBOM有りが推奨されているケース以外ではBOM無しをデフォルト設定しておけば良いかと思われます。

JUnit:privateメソッドを実行(テスト)する方法

JUnitでテストする時にprivateメソッドをテストする方法をご紹介します。
privateメソッドをテストするにはリフレクション「java.lang.reflect.Method」を使用することで実行可能となります。

Javaソース

JUnitサンプル

JUnit:private変数を取得・更新する方法

JUnitでテストする時にprivateなメンバ変数を取得・更新したい場合の方法をご紹介します。
今回はAPI「JMockit」の「Deencapsulation」クラスを使用してカプセル化された変数を参照・更新する方法です。

JMokitのダウンロード

    以下サイトへアクセスしてダウンロードした「jmockit.jar」ファイルをクラスパスへ追加します。
    クラスパスへ追加する際、JUnitより先に読み込む必要があるのでJUnitより上位へ配置します。
    JMokitのダウンロード

JMokitのJavadoc

Javaソース

JUnitサンプル

djUnitでのプライベートコンストラクタのテスト方法

javaではUtilクラスなどのコンストラクタは無駄なインスタンス化を抑制するためにコンストラクタの修飾子をprivateにする事がよくあります。ただdjUnitで試験する場合にはコンストラクタを呼び出したくても修飾子がprivateになっていてはインスタンス化が出来ずに呼び出せないのでカバレッジを100%に出来ません。そういう場合にプライベートコンストラクタをテストする方法についてメモしておきます。

Javaソース

JUnitサンプル

djUnitを実行してクラス名の行が未実行になる

基本的な事ですがjavaのテストでdjUnitを使用していると以下の様にクラス名を指定している行が未実行になってしまうという事がありました。
この原因と対応方法についてメモして置きます。

クラス名が未実行となる原因

  • コンストラクタが定義されていない。

対応方法

  • 以下の様にコンストラクタを定義します。

    未実行の箇所がクラス名の行からコンストラクタの行へ変化したのがわかります。後はコンストラクタ用のテストメソッドを記述すれば全て実行済となります。