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

HTML&JSなど画面まわり&サーブレット小ネタ

サーブレットでアプリ作ってますが、画面まわりに関していろいろいじっているのでそこら辺のネタなんかを。 Contents1 テーブルの結合2 JSPでの動的HTML→POSTで認識できない3 動的プルダ …

no image

JPAでのデータベースとの同期

このブログでも何回か書いてきたJPAですが、新規レコードをインサートさせた際IDを取得し、そのIDをもとに何らかのキーを作る、そういう処理があったので紹介させていただきます。 何回か書いてますが、JP …

no image

StreamのMap処理

Javaのstreamですが知れば知るほどいろいろな機能がありますね。 基本的にプログラムって配列(コレクション含む)とオブジェクトの処理が中心になるので、配列の処理をいかにうまくできるかは非常に大事 …

no image

DBUtils活用

普段はJavaEEで開発を行っているのでデータベースへのアクセスはJPAを活用しています。 ただ、JavaEE環境だとglassfish経由でデータベースを動かしているので、glassfishを動かさ …

no image

JavaSEでのCDI

以前、JavaSEでもCDIを使ってみたい!と思ったのですが、以前は探し方が悪かったのか情報を見つけ出すことができませんでした。 が、昨日ちょっと検索したらちょっと情報があり、無事実装できたのでメモし …