■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2009年07月05日

    Java総合講座 - 初心者から達人へのパスポート
                  vol.160

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


[このメールマガジンは、画面を最大化して見てください。]


========================================================
◆ 01.SOAPのアプリケーション(Webサービス)
========================================================


さて、プログラムの実装が終わった後には、そのプログラムに誤りあるいは
不具合が無いかどうか、徹底的にテストします。
通常、各クラスを開発するプログラマーは、そのクラスの実装後に自分でテスト
を行いますが、このようにプログラム(クラス)を単体でテストすることを
単体テスト(unit test)と言います。
単体テストで不具合が見つかったら、プログラムを修正し、再度、単体テスト
をして不具合が解決したことを確認します。


ところで、これまでのテストでは、HotelClientというテスト用のクライアント・
プログラムを使って、そのソース・コード中に入力データを直接書き込んで
テストしていました。しかしこれでは、入力データを変更するたびにコンパイル
し直し(ただし、Eclipseでは保管するだけで自動的にコンパイルされる)が
必要になり面倒ですし、さらには、テストで不具合が見つかると、プログラム
を修正して再度テストをやり直しますので、再度同じ入力データを入れなおす
ことになり、無駄な重複した作業を行うことになります。

しかも、徹底的にテストするためには多量の入力データを使う必要があるので、
いちいちこれらを手作業で行っていては大変です。
さらには、テスト結果が合格か不合格かをいちいち人が見て判断していたのでは
作業が煩雑な上に、その判断自体に間違いをおかす可能性も大きくなります。


そこで、このような単体テストの作業を楽にするために、JUnitというツールが
提供されており、Eclipseにも組み込まれています。

JUnitは、クラスのメソッドを自動的に実行して、その結果が正しいかどうかを
自動的に判定するもので、一度テスト・ケース(テストのパターン)を用意して
しまえば、あとは自動で迅速にテストを行うことができます。



それでは、実際にEclipseでJUnitを使ってみましょう。

今回は、HotelClient(JStudySoapClientプロジェクトの中の
jp.co.flsi.lecture.webservice.hotelパッケージの中にある)のテストをする
という形式で実際にはWebサービスのテストを行うのですが、これまでのHotelClient
では、ソース・コードに直接入力データを書き込んでいて不都合なので、
入力データを引数として渡し、結果を戻り値として返すようにメソッドを変更
します。下記のようにHotelClientを修正してみて下さい。

--------------------------------------------------------
package jp.co.flsi.lecture.webservice.hotel;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;

public class HotelClient {
   public static boolean reserveRoom(RoomReserveInfo roomReserve) throws RemoteException, ServiceException {
      HotelService locator = new HotelServiceLocator();

      Hotel hotel = null;
      String url = "http://localhost:8080/axis/services/Hotel";
      try {
         hotel = locator.getHotel(new URL(url));
      } catch (MalformedURLException e) {
         e.printStackTrace();
      }
      return hotel.reserveRoom(roomReserve);
   }

}
--------------------------------------------------------

なお、今回はreserveRoom()メソッドのテストだけを説明し、findRooms()メソッド
のほうは省略しています。必要な人は上記のソース・コードに自分でfindRooms()の
テスト用のメソッドも追加してみて下さい。


では、テスト・ケースの作成にはいりましょう。

まず最初にJUnitのパッケージをプロジェクトのクラスパス(ビルド・パス)に
追加しておく必要がありますので、以下のような操作をして下さい。

(1) Eclipseのパッケージ・エクスプローラーの中で、JStudySoapClient(プロジェクト)
を右クリックし、「ビルド・パス」→「ライブラリーの追加」を選択します。

(2) リストの中から「JUnit」を選択(クリック)し、「次へ」ボタンをクリック
します。

(3) 「JUnitライブラリー・バージョン」はそのまま(JUnit 3.8.1)でよいので、
「終了」ボタンをクリックします。


続いて、テスト・ケースを作りましょう。まず、以下のような操作をして下さい。

(1) Eclipseのパッケージ・エクスプローラーの中で、JStudySoapClient(プロジェクト)
の中のHotelClient(jp.co.flsi.lecture.webservice.hotelパッケージの中にある)を
右クリックし、「新規」→「JUnitテスト・ケース」を選択します。

(2) 「作成するメソッド・スタブの選択」の中で「setUp()」にチェック・マークを
入れたあと、「次へ」ボタンをクリックします。

(3) 「使用可能なメソッド」の中で、HotelClientのメソッドがリストされています
から(ただし、上記のようにreserveRoom()メソッドだけしか作っていない場合はこの
メソッド一つだけになる)それにチェック・マークを入れ、「終了」ボタンをクリック
します。


そうすると、パッケージ・エクスプローラーの中にHotelClientTestというクラスが
できますね。このクラスがHotelClientのテスト・ケースのクラスです。
これをこれから編集していきます。



(次回に続く)


では、今日はここまでにします。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2009 Future Lifestyle Inc. 不許無断複製