skillup

技術ブログ

Java

テストコードの実装

投稿日:

以前、テストコードの大切さを力説しましたが、実際に書いてみると作業の安心度が全く違います。

やはりメソッド単位での確認やデバッグができるのは非常にありがたいです。また時間がたってもテストコードを見ることで仕様がわかる点も助かりますね。

仕様書よりもはるかに助かります。

仕様書は読んで字のごとく仕様を定めた書類であり、仕様を確認するためにある書類です。実際の開発業務ですと仕様の修正があるため、仕様書と実際の成果物の差が出てしまうことがほとんどです。

仕様書の意味がないんですよねぇ・・そんなときでもテストコードをみればどのときにどういう動きが正しいのかということがわかりやすい形で定義されているため非常に楽です。

なんで今までやらなかったんだろう・・・という気になりますね。(一番大きいのは自分のテストコードに対する考え方が間違っていたからなのですが。)

テストコードチュートリアル

実際にJavaでテストコードの作成を行います。(下記はNetbeannsでの操作を前提にしています。)

まず対象となるコードの部分で右クリックを行います。

「ツール→テストの作成/更新」という項目がありますので、クリックしますとテストコードが生成されます。最初のうちは全てディフォルトで構わないと思います。

SnapCrab_NoName_2015-4-15_22-21-49_No-00

SnapCrab_NoName_2015-4-15_22-22-13_No-00

下記が実際に生成されたテストコードのキャプチャーになります。

@Testというアノテーションがついているメソッドが実装されるテストコードになります。これ以外にも全テスト実行前、実行後に走るメソッドなどもありますが、最初のうちはIDEが生成したディフォルトで構わないでしょう。

実際に値を代入し、戻り値の変数を設定します。ここではexeResultというのが期待値(つまりこの値になればOKということ。)になります。

SnapCrab_NoName_2015-4-15_22-23-4_No-00

テストコード

このassertEqualsというメソッドが期待値と実際の値が等しいかをチェックするJunitのメソッドになります。二つの変数があっていれば問題なくテストが終わり、テストが無事終了します。(成功時には下記のようなメッセージが出力されます。)

SnapCrab_NoName_2015-4-15_22-23-17_No-00

他にも無数のメソッドがありますが、assertEqualsだけで結構いけました。他にも使えそうなものがあれば随時紹介していこうとおもいます。

テストコードがありがたい点として、単体での確認ができること。テストコードが10個あっても1つだけを単独で実行させることができます。

デバッグもできますので、単体のメソッドの動きを見たいときはここでブレークポイントを設定して、見てあげればOKです。これがめちゃくちゃ便利です。

注意点としてはテストに関係ないプログラムで文法エラーなどがある場合、動きません。そのような場合はとりあえず文法エラーがなくなるまでコーディングをするか、一時的にコメントアウトしましょう。

ちなみにテストに失敗したときは下記のような赤いメッセージが出力されます。期待値と実際の値が違ってたときや例外が発生したときです。
SnapCrab_NoName_2015-4-15_22-41-53_No-00

-Java
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

JPAを使用する  JavaSE編

現在の開発ではデータベースへの接続ではJPAを使っています。このJPAがなかなか曲者でいろいろと詰まることがありましたので解説させていただきます。 Contents1 JPAとは?1.1 メリット1. …

no image

リフレクション

前回のエントリーでは動的にクラスを使いまわす方法について書いたのですが、同様にリフレクション(動的にインスタンスを生成する方法)という技術についても学びました。 社長いわく黒魔術みたいなものといってい …

no image

クラスパスの通し方

今回はNetbeansでなく、IDEを使わずにJavaを使う場合の記事です。 Javaで開発している人の99%はIDEで開発をしていると思うのですが、サーバー上で一時的テストをしないといけないような場 …

no image

GlassFishでDB接続

JavaEEではアプリケーションサーバーとしてGlassFishを使いますが、先日、GlassFishを通さないとJavaEEでDBが動かせないということを知りました。そのためJavaEEではデータベ …

no image

JSFのメッセージのレンダリング

ManagedBeanとJSFでメッセージのやり取りをする場合、直接メッセージを変数として持たせるよりは、JSFの仕組みを通じてメッセージを出力させたほうが適切です。 Contents1 エラーメッセ …

アーカイブ