Get started with unit and component testing using IBM Rational tools

Similar documents
Agileイベント・フレームワークとOracle BPELを使用したPLMワークフローの拡張

Oracle SOA Suite 11gコンポジットに対するSOASchedulerの構成

V8.1新規機能紹介記事

クラウド内の Java - 動画スクリプト 皆さん こんにちは Steve Perry です 私たちが作成した人事アプリケーションを覚えていますか? 今回は そのアプリケーションをクラウド内で実行しましょう コードは GitHub の

Oracle ESB レッスン03: ESB CustomerData SOAP

WebOTXマニュアル

Oracle BPEL Process Managerを使用したJD Edwards EnterpriseOne顧客信用情報の問合せ

1 検証概要 目的及びテスト方法 1.1 検証概要 Micro Focus Server Express 5.1 J の Enterprise Server が提供する J2EE Connector 機能は 多くの J2EE 準拠アプリケーションサーバーについて動作検証がなされています 本報告書は

1 検証概要 目的及びテスト方法 1.1 検証概要 Micro Focus Server Express 5.1 J の Enterprise Server が提供する J2EE Connector 機能は 多くの J2EE 準拠アプリケーションサーバーについて動作検証がなされています 本報告書は

Microsoft PowerPoint - Tutorial_2_upd.ppt

Eclipse 操作方法 (Servlet/JSP 入門補助テキスト)

ユニット・テストの概要

WebOTXマニュアル

実行形式の作成と構成管理 2012 年 7 月 8 日 海谷治彦 1

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

1. 検証概要 目的及びテスト方法 1.1 検証概要 Micro Focus Server Express 5.1 J の Enterprise Server が提供する J2EE Connector 機能は JCA 仕様準拠のコンテナとして多くの J2EE 準拠アプリケーションサーバーについて動作

Java言語 第1回

WebOTX V6 J2EEアプリケーションのトラブルシューティング

TestDesign for Web

インテル(R) Visual Fortran コンパイラ 10.0

Microsoft PowerPoint - Lecture_3

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書   第3版  

論文誌用MS-Wordテンプレートファイル

Microsoft PowerPoint - グリッド協議会GT4演習資料_2007_配布用

プレポスト【問題】

intra-mart Accel Platform

Oracle ESB - レッスン02: CustomerDataバッチCSVファイル・アダプタ

WebOTXマニュアル

Oracle Universal Content Management ドキュメント管理 クイック・スタート・チュ-トリアル

JD Edwards EnterpriseOneリアルタイム・イベントのOracle Enterprise Service Busへのパブリッシュ

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

Microsoft PowerPoint - Tutorial_6.ppt

論文誌用MS-Wordテンプレートファイル

SystemDirector Developer's Studio(V3.2) 適用ガイド

IBM i のスマート・デバイス活用【HATSのiPhone / iPadサポート編】

Consuming a simple Web Service

Oracle SALTを使用してTuxedoサービスをSOAP Webサービスとして公開する方法

WebReportCafe

sscapt.jar(ver.2) ソースコードの使い方 説明書 MLTLab ( エムエルティ ラボ ) 2014 年 4 月 21 日

Microsoft Word - JRE_Update_6.doc

Gartner Day

1 検証概要 目的及びテスト方法 1.1 検証概要 Micro Focus Visual COBOL 2.1 J の Enterprise Server が提供する JavaEE Connector 機能は JCA 仕様準拠のコンテナとして多くの JavaEE 準拠アプリケーションサーバーについて動

Intuit QuickBooks との統合

VPN 接続の設定

Web GIS Template Uploader 利用ガイド

intra-mart Accel Platform — OData for SAP HANA セットアップガイド   初版  

Symantec AntiVirus の設定

Slide 1

VPN ユーザを管理し、RV016、RV042、RV042G および RV082 VPN ルータの速い VPN を設定して下さい

Microsoft PowerPoint ppt

発環境を準備しよう2 章開Eclipseをインストールしようそれでは Eclipseをセットアップしましょう Eclipseは Eclipse Foundationのサイトからダウンロードできます ダウンロードのページを開くと いく

メディプロ1 Javaサーブレット補足資料.ppt

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

SystemDirector Developer's Studio(V3.2) 適用ガイド

HARTING Node.js Environment for HAIIC MICA 日本語 HARTING Node.js Environment for HAIIC MICA HARTING IT Software Development Marienwerder Str. 3, E

事前準備マニュアル

Oracle9i JDeveloperによるWebサービスの構築

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

PowerPoint Presentation

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

<4D F736F F D20837D815B B838B837A838B835F E836782CC91E391D68EE892692E646F63>

Microsoft Word - tutorial3-dbreverse.docx

miChecker導入手順書

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

IBM FormWave for WebSphere

FA/LAインストールガイド(トライアル版)

IBM Rational Software Delivery Platform v7.0 What's

intra-mart im-JavaEE Framework

PowerPoint プレゼンテーション

intra-mart im-J2EE Framework

XMP structure: 1

スライド 1

PowerPoint プレゼンテーション

(Veritas\231 System Recovery 16 Monitor Readme)

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

WESB MTOM機能ガイド

McAfee SaaS Protection 統合ガイド Microsoft Office 365 と Exchange Online の保護

ELC 5.3

— intra-mart Accel Platform セットアップガイド (WebSphere編)   第7版  

============================================================

Microsoft Word - J-migratingjdevelope#110A7A.doc

目次 第 1 章概要....1 第 2 章インストールの前に... 2 第 3 章 Windows OS でのインストール...2 第 4 章 Windows OS でのアプリケーション設定 TP-LINK USB プリンターコントローラーを起動 / 終了するには

アプリケーションサーバ用データベースアクセス 汎用コントロール Version Copyright(c) 2004 MRO co;ltd All Rights Reserved

クラス図とシーケンス図の整合性確保 マニュアル

intra-mart WebPlatform/AppFramework

はじめに

Oracle SQL Developer Data Modeler

使用する前に

PowerPoint Presentation

Microsoft Word - FWTEC0003.doc

IIS8でのクライアント証明書の設定方法

応用プロジェクト(奥田担当分第1回・12月7日)

IBM FormWave for WebSphere

Java知識テスト問題

Microsoft Word - jpluginmanual.doc

改版履歴 版数 改版日付 改版内容 /03/14 新規作成 2013/03まで製品サイトで公開していた WebSAM DeploymentManager Ver6.1 SQL Server 2012 製品版のデータベース構築手順書 ( 第 1 版 ) を本 書に統合しました 2

手順書

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows : インストール・ガイド

1. はじめに 1) 本ガイドについて本ガイドでは AVG Admin バージョン 2013.x.xxxx または 2016.x.xxxx( 以下 AVG Admin 2013/2016 と言います) をお使いの環境で AVG インターネットセキュリティビジネスエディション 2013/2016 や

Transcription:

IBM Rational ツールを使用して始めるユニット テストとコンポーネント テスト ユニット テストおよびコンポーネント テストのための総合ガイド レベル : 中級 Rosaline Makar ( rosaline@eg.ibm.com ) Software Engineer IBM 2007 年 10 月 11 日 アプリケーションの重要な機能を実現するためにコードを統合する際には コンポーネント テストが欠かせません このチュートリアルでは単純な HelloWorld を例に JUnit および Jakarta Cactus テスト フレームワークを使用して Java コード Web サービス サーブレット SCA (Service Component Architecture) そして EJB (Enterprise JavaBeans) Bean を対象にした ユニット テストとコンポーネント テストを行う手順をステップごとに手ほどきします また IBM Rational Software Architect IBM Rational Application Developer IBM WebSphere Integration Developer によってユニット テストおよびコンポーネント テストを自動化する方法も学びます 原文 URL: https://www6.software.ibm.com/developerworks/education/ws-testing/ws-testing-a4.pdf

セクション 1. 始める前に このチュートリアルについて このチュートリアルでは HelloWorld を例に Java コード Web サービス サーブレット SCA EJB Bean を対象としたユニット テストとコンポーネント テストを実行する方法を説明します ( 新しい概念を学ぶには HelloWorld プログラムを作成してみるのがもっとも近道です ) ここでは JUnit および Jakarta Cactus テスト フレームワークを使用してユニット テストとコンポーネント テストを行います 目的 このチュートリアルを最後まで終えると ユニット テストとコンポーネント テストの実行方法 そして IBM Rational Application Developer IBM Rational Software Developer または IBM WebSphere Integration Developer を Apache Ant と共に使用してテストを自動化する方法が理解できるはずです 前提条件 SCA サーブレット EJB Bean Web サービス Java コードのどれをテストするにしても このチュートリ アルの手順に従うにはテスト対象の技術についての基礎知識が必要です さらに システム要件 セクションにリストアップした製品での基本的な技術経験があることを前提とします システム要件 このチュートリアルでは Java コード Web サービス サーブレット EJB Bean をテストするツールとして 以下のどちらかを選択することができます Rational Software Architect V6.0 Rational Application Developer V6.0 Java Web サービス サーブレット EJB のテストと併せて SCA のテストも行う場合には WebSphere Integration Developer V6.0.1 または 6.0.2 が必要です

セクション 2. はじめに どんなソフトウェア開発プロジェクトにもテストは欠かせません テストによって ソフトウェアが実行される複数の経路をシミュレートすることで バグのない十分にテストされた製品を提供することが可能となり 製品の堅牢性と品質をカスタマーに保証することができます 納期が厳しい あるいはリリース後の修正を計画しているなどの理由でソフトウェア テストを軽視すると 後から見つかるバグを修正するコストがかさんできます バグ修正のコストは ソフトウェア開発サイクルが進行するにつれて劇的に増加するからです ソフトウェア開発サイクル中に行うテストには 主に以下の 4 つのタイプ ( フェーズ ) があります ( 図 1 を参照 ) 1. ユニット テスト Java クラス Web サービス EJB Bean サーブレットなど 基本単位のコードをテストするためのホワイト ボックス テストです 2. コンポーネント テスト 基本単位のコードを実動コード ベースに統合する前に 特定の機能を実行するための基本単位のコードを統合してテストを行います 3. システム テスト システム全体をテストし 統合された複数のコンポーネントが確実に動作するようにします 4. アクセプタンス テスト ソフトウェア製品がカスタマーの機能要件および非機能要件を満たしているかどうかをテストします 図 1. ソフトウェア テスト 構造がピラミッドのようになっていることに注目してください この構造が テストの順番の重要性を顕著に表しています 例えば それぞれのコード単位でユニット テストを実行した後には コンポーネント テストを実行して これらのコード単位を統合したものについて妥当性を確かめるといった具合です

JUnit は Erich Gamma と Kent Beck によって作成された Java 用リグレッション テストのフレームワークです 一方の Cactus は Apache Web サイトで説明されているようにサーバー サイド Java のコード ( サーブレット EJB Bean タグ ライブラリー フィルターなど) のユニット テストを行うための単純なテスト フレームワークです JUnit を拡張する Cactus は サーバー サイド コードのテストを作成するコストを削減するように設計されており コンテナー内ストラテジーを実行します つまり テストはコンテナー サーバー内部で実行されるということです (Cactus についての詳細は 参考文献 のリンクを参照 ) このチュートリアルでは ユニット テストとコンポーネント テストを実演するために一貫して JUnit および Cactus の両テスト フレームワークを使用します ここで説明するテストはすべて チュートリアルの終わりにある ダウンロード セクションから入手できます セクション 3. テスト環境の準備 このセクションでは このチュートリアルを通して必要な環境を準備する方法について説明します 機能の有効化 Rational Software Architect Rational Application Developer WebSphere Integration Developer のいずれかをご使用の場合 以下の手順に従って Web サービスの開発およびテスト機能を有効にしてください 1. Window > Preferences > Workbench > Capabilities の順に選択します 2. 右ペインにある Web Service Developer にチェック マークを付けます ( 図 2 を参照 )

図 2. 機能の有効化 JUnit でテストするための準備 JUnit フレームワークを使ってテストを行うプロジェクトでは そのクラス パスに junit.jar を含める必要があります junit.jar は <IDE_HOME> eclipse plugins org.junit_3.8.1 junit.jar にあります ここで <IDE_HOME> は Rational Application Developer Rational Software Developer または WebSphere Integration Developer のインストール ディレクトリーです 例えば WebSphere Integration Developer を使用している場合 インストール ディレクトリーは C: Program Files IBM WebSphere 601 となるので junit.jar は C: Program Files IBM WebSphere 601 eclipse plugins org.junit_3.8.1 に配置されています junit.jar をプロジェクトのクラス パスに追加するには 以下の手順に従ってください 1. プロジェクトを右クリックし Properties を選択します 2. 左ペインで Java Build Path を指定します

3. Libraries タブを表示して Add External JARs をクリックします 4. junit.jar までブラウズします ( 図 3 を参照 ) 図 3. クラス パスへの junit.jar の追加 Cactus でテストするための準備 動的 Web プロジェクトで Cactus フレームワークを使ってサーバー サイドのユニット テストを行うには 以下の手順に従ってください 1. 以下の.jar ファイルを WebContent WEB-INF lib に追加します aspectjrt-1.2.1.jar cactus-1.7.2.jar commons-httpclient-2.0.2.jar commons-logging-1.0.4.jar junit.jar 注 : Cactus は JUnit を拡張するため junit.jar を含める必要があります (Cactus の.jar ファイルは ダウンロード セクションまたは apache.org から入手できます ) 次に サーバー サイドで (ServletTestRedirector サーブレットを介して ) テスト メソッドを呼び出すため に欠かせない Cactus サーブレットを追加し さらに (ServletTestRunner サーブレットを介して ) テスト を実行するために必要なサーブレットを追加します サーブレットを追加する手順は以下のとおりです

1. 動的 Web プロジェクトの web.xml ファイルを開きます 2. Source タブをクリックし 以下の 2 つのサーブレット ( リスト 1 を参照 ) を追加します servlet-name:servletredirector,servlet-class: org.apache.cactus.server.servlettestredirector. servlet-name:servlettestrunner,servlet-class: org.apache.cactus.server.runner.servlettestrunner. リスト 1. Cactus サーブレットの追加 <servlet> <servlet-name>servletredirector</servlet-name> <servlet-class>org.apache.cactus.server.servlettestredirector</servlet-class> </servlet> <servlet> <servlet-name>servlettestrunner</servlet-name> <servlet-class>org.apache.cactus.server.runner.servlettestrunner</servlet-clas s> </servlet> <servlet-mapping> <servlet-name>servletredirector</servlet-name> <url-pattern>/servletredirector</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>servlettestrunner</servlet-name> <url-pattern>/servlettestrunner</url-pattern> </servlet-mapping> 3. Ant を使用して Cactus テスト ケースを自動化し Cactus Ant タスクを実行するために cactus-ant-1.7.2.jar と cargo-0.5.jar を WebContent WEB-INF lib の下に追加します ( この 2 つの.jar ファイルは ダウンロード セクションまたは apache.org から入手できます )

セクション 4. ユニット テスト このセクションでは 以下のタイプのユニット テストについて説明します JUnit フレームワークを使用した Java および Web サービスのユニット テスト Cactus フレームワークを使用したサーブレットおよび EJB のユニット テスト Java のユニット テスト テスト対象の Java クラスを作成する 以下の手順に従って テスト対象の Java クラスを作成します 1. プロジェクト交換として HelloWorldJava.zip ( ダウンロード セクションから入手可能 ) をインポートす るか または HelloWorldJava という名前の Java プロジェクトを作成します 2. com.ibm.tdc パッケージの下に HelloWorld という名前のクラスを作成します 3. リスト 2 のコードを HelloWorld クラスに貼り付けます リスト 2. HelloWorld Java コード package com.ibm.tdc; public class HelloWorld public String getgreeting (String name) return "Hello! "+name; JUnit テスト ケースを作成する テスト ケースとは 特定の目的に合わせて作成した テストの入力 実行条件 そして要求される結果のセットのことです 特定の Java クラスを対象とした JUnit テスト ケースを作成するには 以下の手順に従います 1. Java パースペクティブに切り替えます

2. HelloWorld.java を右クリックし New > JUnit Test Case の順に選択します 3. junit.jar をビルド パスに追加するかどうかを尋ねるメッセージ ボックスが表示されます ( 図 4 を参 照 ) 図 4. junit.jar の追加 4. Yes をクリックします 5. JUnit Test Case をクリックします 選択されたオプションと生成される Java コードとをマッピングする Test Methods ダイアログ ボックスが表示されます このマッピングは New JUnit Test Case ウィザード によるものです ( 図 5 を参照 ) 図 5. New JUnit Test Case ウィザード

6. 生成されたコードでは ロジックをテストするためのテスト メソッドを編集することができます ( リスト 3 を 参照 ) リスト 3. HelloWorld ユニット テスト package com.ibm.tdc; import junit.framework.testcase; public class HelloWorldTest extends TestCase private HelloWorld helloworld; public static void main(string[] args) // TestRunner is used to execute test cases // textui is used to run test cases in text mode junit.textui.testrunner.run(helloworldtest.class); /* * @see TestCase#setUp(), It is executed before each test method */ protected void setup() throws Exception super.setup(); helloworld = new HelloWorld(); /* * Tests the getgreeting method */ public void testgetgreeting() // The assertion succeeds if the left argument equals to the right argument assertequals("hello! Rose", helloworld.getgreeting("rose")); リスト 3 では以下の点に注意してください public static void main(string[] args) はオプションですが コマンド ラインから JUnit テスト ケース

を実行する場合に使用します TestRunner はテスト ケースを実行するために使用します textui はテキスト モードでテスト ケースを実行するために使用します この場合 テスト結果はコンソー ルに表示されます setup() は TestCase クラスに含まれるメソッドの 1 つです このメソッドは各テスト メソッドの前に実行されます 一方 teardown() は各テスト メソッドの後に実行されます setup() と teardown() はどちらもオプションのメソッドです リスト 3 では setup() を使用して テスト対象クラスの新しいインスタンスを作成しています testgetgreeting() は getgreeting() メソッドをテストします JUnit の命名規則では テスト メソッドには接頭辞 test を付け 引数は一切使用しないように規定されています つまり JUnit の TestRunner はリフレクションを使用して自動的にテスト メソッドを実行するため 従うべきシグニチャーは public void testxxx() [throws...] となります テスト ケースには少なくとも 1 つのテスト メソッドがなければなりません テスト メソッドが 1 つもない場合 JUnit テスト ケースを実行しても失敗に終わります assertequals() は テストの結果と期待される値との比較に使用されます 期待される結果と実際の結果が同じであればアサーションは成功し そうでなければ失敗します JUnit には さまざまな出力チェックをサポートする複数のアサーションのバージョンがあります (Assert クラスについての詳細は 参考文献 のリンクを参照してください ) 7. JUnit テスト ケースの実行シーケンスを図 6 のシーケンス図に示します

図 6. JUnit の振る舞い JUnit テスト ケースを実行する JUnit テスト ケースを実行するには 以下の 2 通りの方法があります HelloWorldTest を右クリックし Run > JUnit Test の順に選択します テスト ケースが成功したこと を示す緑のバーが表示されます ( 図 7 を参照 ) 赤いバーが表示された場合は テスト ケースが失敗し たか あるいはエラーが発生したことを意味します

図 7. JUnit テスト ケースの実行 失敗の原因としては以下のものが考えられます assert 文の失敗 メッセージ fail(string message) の発生 このメッセージはテストの失敗に使用され catch ブロック 内に配置される場合があります テスト ケース クラス内にテスト メソッドが 1 つも定義されていない エラーの原因としては以下のものが考えられます まだテストされていなかったために予想されなかった例外 ( 例えば NullPointerException など キャッ チされなかった例外 ) JUnit テスト ケースを実行するもう 1 つの方法は HelloWorldTest を右クリックして Run > Java Application の順に選択することです この方法では テスト ケースは Java アプリケーションとして実行 されます textui の場合 テスト結果はコンソールに表示されることに注意してください

図 8. Java アプリケーションとしてのテスト ケースの実行 テスト スイートを作成する テスト スイートは 複数のテスト ケースを 1 つのセットとしてまとめるために使用します つまり 1 回のク リックで多数のテスト ケースを実行できるようにするということです 1. テスト ケースのパッケージ com.ibm.tdc を右クリックして New > Other > Java > JUnit > JUnit Test Suite の順に選択します 2. Next をクリックします 3. テスト スイートに含めるテスト ケースを選択し ( 図 9 を参照 ) Finish をクリックします

図 9. テスト スイートの新規作成 以下のコードが自動的に生成されます リスト 4. AllTests テスト スイート package com.ibm.tdc; import junit.framework.test; import junit.framework.testsuite; public class AllTests public static void main(string[] args) junit.textui.testrunner.run(alltests.suite());

public static Test suite() TestSuite suite = new TestSuite("Test for com.ibm.tdc"); //$JUnit-BEGIN$ suite.addtestsuite(helloworldtest.class); //$JUnit-END$ return suite; 上記では addtestsuite() を使用してテスト ケース クラスを追加しています テスト スイートを実行する方法は JUnit テスト ケースを実行する場合とまったく同じです ただし TestRunner はテスト スイートを実行するために public static Test suite() を検索することに注意して ください Web サービスのユニット テスト Web サービス プロキシーとは Web サービス プロキシーとは WSDL (Web Services Description Language) ファイルから生成され る一連のクラスのことです Web サービス プロキシーは単純な Java コードの中に検索と呼び出しの詳 細を隠すことで クライアントの開発が簡単にできるようにします JUnit を使用して Web サービスをテストするには Web サービスからプロキシーを生成します JUnit テスト ケースがこのプロキシーに対して実行されると プロキシーに隠された Web サービスが呼び出されます プロキシーのテストが成功するということは すなわち Web サービスのテストが成功したことを意味します テスト対象の Web サービスを作成する テスト対象の Web サービスを作成するには HelloWebService.zip ( ダウンロード セクションから入手可能 ) をプロジェクト交換としてインポートします この Web サービスが持つ唯一のオペレーション getgreeting() は 前にテストした Java プロジェクトの HelloWorld クラスとして機能します この Web サービスの実装はリスト 5 のとおりです

リスト 5. Web サービスの実装 package com.yourco.www; public class HelloPortBindingImpl implements HelloPortType public String getgreeting(java.lang.string name) throws java.rmi.remoteexception return "Hello! "+name; Web サービスのテストを作成する 以下の手順に従って Web サービスのクライアント クラスとユニット テスト クラスが含まれる Java プロ ジェクトを作成します 1. Web サービス テスト プロジェクトを表す HelloWebServiceTest という名前の Java プロジェクト を作成します 2. Web サービス クライアント ( つまり プロキシー クラス ) を生成するため HelloWebServiceTest Java プロジェクトの下に wsdl というフォルダーを作成します 3. wsdl フォルダー内に HelloService.wsdl ファイル (HelloWebService プロジェクトから取得 ) を貼 り付けます 4. HelloService.wsdl を右クリックし Web Services > Generate Client の順に選択します ( 図 10 を参照 ) 図 10. Web サービスのユニット テスト 5. Web Service Client ウィザードで このウィザードに示されるデフォルト値を受け入れ 最後に Finish をクリックします Client Environment Configuration ダイアログ ボックスでは Web service runtime

が IBM WebSphere と表示されている必要があることに注意してください ( 図 11 を参照 ) 図 11. Client Environment Configuration 6. HelloPortTypeProxy.java を右クリックし New > JUnit Test Case の順に選択します これは任意の Java クラスとしてテストすることが可能です ( JUnit テスト ケースを作成する セクションを参照 ) ただし この HelloPortTypeProxy には Web サービスのオペレーションが含まれていることに注意してください 7. テストするメソッドは getgreeting() です このテスト ケースのクラスを完成するには リスト 6 に記 載するコードを使用します リスト 6. Web サービスのユニット テスト package com.yourco.www; import java.rmi.remoteexception; import junit.framework.testcase; public class HelloPortTypeProxyTest extends TestCase private HelloPortTypeProxy helloporttypeproxy; public static void main(string[] args) junit.textui.testrunner.run(helloporttypeproxytest.class);

protected void setup() throws Exception super.setup(); helloporttypeproxy = new HelloPortTypeProxy(); public void testgetgreeting() throws RemoteException String greeting = null; greeting = helloporttypeproxy.getgreeting("rosa"); assertequals("hello! Rosa", greeting); 注 : testgetgreeting() が RemoteException 例外をスローするのは getgreeting() がこの例外を スローするからです Web サービスのテストを実行する 以下のいずれかの手順で Web サービスのテストを実行し さまざまな失敗およびエラーのシナリオを試し てみます JUnit テスト ケースを実行する セクションを参照して テスト ケースを実行します リスト 6 の testgetgreeting() コードでは HelloWebService がダウンしている場合 ( サーバーにデプロイされていないなど ) JUnit フレームワークがリモート例外をキャッチしてエラーを生成し この例外に関する完全なスタック トレースを表示します このトレースはデバッグする際に役立ちます ( 図 12 を参照 ) 図 12. Web サービスのダウンによるエラー

この場合のエラーは キャッチされない例外 ( リモート例外 ) が発生したことを示す不測の問題を明らかに します RemoteException をキャッチするという別の手段もあります ( リスト 7 を参照 ) リスト 7. Web サービスのユニット テスト public void testgetgreeting() String greeting = null; try greeting = helloporttypeproxy.getgreeting("rosa"); assertequals("hello! Rosa", greeting); catch (RemoteException e) fail("remote Exception Occurred..."); リスト 7 では RemoteException が呼び出されることが想定されているため fail() を使用しても例外 の原因となったメソッドが含まれる完全なスタック トレースは生成されません ただし メッセージは生成され

ます HelloWebService がダウンしている場合 fail() が実行されて失敗になります ( 図 13 を参照 ) 図 13. Web サービスのダウン 失敗によって 不測の問題が発生したことが明らかにされています サーブレットのユニット テスト このセクションでは HelloWorld サーブレットのユニット テストについて検討します コンテナー内テストを 実行するには JUnit テスト フレームワークを拡張する Cactus テスト フレームワークを使用します テスト対象のサーブレットを作成する 単純なサーブレットを作成してテストする手順を以下に説明します 1. HelloWorld.zip ( ダウンロード セクションから入手可能 ) をプロジェクト交換としてインポートします ま たは HelloWorld という名前の動的 Web プロジェクトを作成し HelloWorldServlet というサーブレッ トを作成します 2. リスト 8 のコードを HelloWorldServlet に貼り付けます このサーブレットは以下の操作を行いま す リクエスト パラメーターから名前を取得します グリーティングをセッションに設定します

グリーティングをレスポンスに書き込みます リスト 8. HelloWorldServlet package com.ibm.tdc; import java.io.ioexception; import java.io.printwriter; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class HelloWorldServlet extends HttpServlet ブラウザーに http://localhost:9080/helloworld/helloworldservlet?name=rosa と指定してこのサ ーブレットをテストしたとすると 図 14 のような結果になっているはずです 図 14. サーブレットの実行 サーブレットのテストを作成する 以下の手順に従って HelloWorldServletTest クラスを作成してください このクラスは Cactus ServletTestCase クラスを継承し HelloWorldServlet をテストできるようにします 1. Cactus でテストするための準備 セクションで説明した手順を実行します 2. Java パースペクティブに切り替えます 3. HelloWorldServlet.java を右クリックし New > Other > Java > JUnit > JUnit Test Case の順 に選択します

4. JUnit Test Case ダイアログ ボックスで スーパークラスに org.apache.cactus.servlettestcase を選択してから Next をクリックします 5. getgreeting メソッドを指定し Finish をクリックします ( 図 15 を参照 ) 図 15. テストするメソッドの選択 6. begingetgreeting を使ってクライアント サイドからのリクエスト パラメーター name を設定します ( リスト 9 を参照 ) リスト 9. begingetgreeting public void begingetgreeting(webrequest webrequest) webrequest.addparameter("name", "Rose");

以下の動作が行われることに注意してください サーバー サイドで testxxx() が実行される前に クライアント サイドで beginxxx() が実行されま す テスト終了時にクライアント サイドで endxxx() が実行されます setup() および teardown() がそれぞれ testxxx() の実行前 実行後にサーバー サイドで実行さ れます WebRequest には Cactus テスト ケースの HTTP リクエストのデータが含まれます 7. リスト 10 のコードを testgetgreeting の本文に追加します リスト 10. testgetgreeting HelloWorldServlet helloworldservlet=new HelloWorldServlet(); helloworldservlet.getgreeting(request); assertequals("hello Rose!",session.getAttribute("greeting")); リスト 10 のコードの内容は以下のとおりです HelloWorldServlet の新規オブジェクトを作成します getgreeting() を呼び出し Cactus によって自動的に初期化される暗黙オブジェクトの 1 つ request を渡します request の型は org.apache.cactus.server.httpservletrequestwrapper で これは javax.servlet.http.httpservletrequest から継承します したがって HttpServletRequest 型の変数を取るサーブレット メソッドに渡すことができます 期待される値と セッション属性に保管されている値とが同じであるかどうかをチェックします コード全体は リスト 11 のようになります

リスト 11. HelloWorldServletTest package com.ibm.tdc; import org.apache.cactus.servlettestcase; import org.apache.cactus.webrequest; public class HelloWorldServletTest extends ServletTestCase public void begingetgreeting(webrequest webrequest) webrequest.addparameter("name", "Rose"); public void testgetgreeting() HelloWorldServlet helloworldservlet=new HelloWorldServlet(); helloworldservlet.getgreeting(request); assertequals("hello Rose!",session.getAttribute("greeting")); サーブレットのテストを実行する HelloWorldServletTest クラスを実行する手順は以下のとおりです 1. HelloWorldServletTest テスト クラスを右クリックし Run > Run の順に選択します 2. Configurations リストで JUnit を選択し New をクリックします 3. 右ペインで Arguments タブをクリックします 4. VM arguments フィールドの Cactus コンテキスト URL を -Dcactus.contextURL=http://localhost:9080/HelloWorld に設定します ( 図 16 を参照 ) HelloWorld はプロジェクト名であることに注意してください cactus.contexturl はテスト アプリケーションが実行されるアプリケーション コンテキストを表します

図 16. Cactus 構成 5. Run をクリックします テストにパスして 図 7 のような緑のバーが表示されるはずです このバーは テ ストが成功したことを示します EJB のユニット テスト このセクションでは HelloWorld ステートレス セッション EJB Bean を作成する方法 そして Cactus テスト フレームワークを使用してユニット テストを行う方法を説明します テスト対象の EJB を作成する 以下の手順に従って HelloWorld ステートレス セッション EJB Bean を作成してください 1. テストするステートレス セッション EJB Bean を作成するには HelloEJB.zip ( ダウンロード セクショ ンから入手可能 ) をプロジェクト交換としてインポートします または File > New > Project > EJB > EJB project の順に選択し プロジェクト名として HelloEJB と入力して Finish をクリックします 2. HelloEJB を右クリックして New > Other > EJB > Enterprise Bean の順に選択し Next をクリッ クします 3. 図 17 に示す値を入力します ここでは EJB タイプとして Session bean を選択し Bean の基 本プロパティーを定義しています 入力が完了したら Next をクリックします

図 17. 新規 EJB Bean の作成 4. Session type のドロップダウン リストから Stateless を選択し ( 図 18 を参照 ) Finish をクリック します

図 18. EJB 詳細の入力 5. リスト 12 のコードを HelloBean に貼り付けます リスト 12. EJB メソッドの実装 public String getgreeting(string name) System.out.println("stateless session bean..."); return "Hello! "+name; 6. getgreeting() メソッドをリモート インターフェースにプロモートします ( 図 19 を参照 )

図 19. リモート インターフェースへのプロモート getgreeting() メソッドをリモート インターフェース (Hello) にプロモートすると Hello リモート インターフ ェースにリスト 13 に示すコード行が生成されます リスト 13. リモート インターフェースによって生成されたコード public String getgreeting(string name) throws java.rmi.remoteexception; このリモート メソッドは リモート クライアントが呼び出します EJB のテストを作成する HelloEJB のテストは サーブレットのユニット テスト セクションで作成した動的 Web プロジェクト HelloWorld で実行します 1. HelloWorldEAR のデプロイメント記述子を開きます

2. Module タブを表示し HelloEJBClient.jar を Project Utility JARs リストに追加します ( 図 20 を参照 ) 図 20. Project Utility JARs 3. HelloWorld プロジェクトを右クリックし Properties > Java JAR Dependencies の順に選択しま す 4. 右側にあるリストで HelloEJBClient.jar を選択し OK をクリックします JAR 依存関係は図 21 のように表示されます

図 21. JAR 依存関係 5. HelloWorld Web プロジェクトに対して Cactus でテストするための準備 セクションで説明した手順 をまだ実行していない場合は ここで実行します ( サーブレットのテストを作成する セクションを参照 ) 6. HelloEJB の JUnit テスト ケースとして HelloEJBTest を作成し リスト 14 のコードを HelloEJBTest に挿入します リスト 14. HelloEJBTest package com.ibm.tdc; import java.util.hashtable; import java.rmi.remoteexception; import javax.ejb.createexception; import javax.naming.context; import javax.naming.initialcontext; import javax.naming.namingexception; import javax.rmi.portableremoteobject; import org.apache.cactus.servlettestcase; public class HelloEJBTest extends ServletTestCase public void testgetgreeting() throws NamingException,

RemoteException, CreateException Hashtable env = new Hashtable(); Object obj = null; Context ctx = null; String strurl = "iiop://localhost:2809"; env.put(context.provider_url, strurl); ctx = new InitialContext(env); obj = ctx.lookup("ejb/com/ibm/tdc/hellohome"); HelloHome bfmh = (HelloHome) PortableRemoteObject.narrow(obj, HelloHome.class); テスト対象の EJB を実行する サーブレットのテストを実行する セクションを参照して HelloEJBTest を実行してください

セクション 6. SCA (Service Component Architecture) のテスト SCA は サービス指向アーキテクチャー (SOA) の中でビジネス ソリューションを構築して組み立て サービスを統合および作成するために設計された新たなプログラミング モデルです 詳細は Building SOA solutions with the Service Component Architecture (developerworks 2005 年 10 月 ) を参照してください SCA のコンポーネント テストに使用するのは ServletTestCase です このテスト ケースは Cactus フレームワークを使用し スタンドアロン参照によって SCA コンポーネントを外部で呼び出します このセクションでは スタンドアロン参照に接続する SCA コンポーネントを使って HelloWorldModule モジュールを作成し その後 SCA コンポーネントをテストする HelloWorldModuleTest という動的 Web プロジェクトを作成します SCA モジュールを作成する SCA モジュールを作成してテストするには 以下の手順に従います 1. HelloWorldModule.zip ( ダウンロード セクションから入手可能 ) をプロジェクト交換としてインポート するか または File > New > Project > Module の順にクリックしてモジュールを作成し Next をクリック します 2. プロジェクト名として HelloWorldModule と入力します 3. Business Integration パースペクティブで HelloWorldModule までナビゲートして右クリックし Interfaces を選択します 4. New > Interface の順に選択し インターフェースに HelloInterface という名前を指定します 5. Interface Editor が開いたら 入力 (Input(s)) に name を取り greeting を出力 (Output(s)) する getgreeting オペレーションを追加します ( 図 37 を参照 )

図 37. HelloInterface 6. Assembly Editor を開きます 7. Java SCA コンポーネントをドラッグ アンド ドロップして HelloJava という名前を付け そのコンポーネ ントに HelloInterface をコンポーネント インターフェースとして追加します 8. Process SCA コンポーネントをドラッグ アンド ドロップして HelloProcess という名前を付け HelloInterface をコンポーネント インターフェースおよびコンポーネント リファレンスとして追加します 9. HelloProcess を HelloJava に接続します 10. HelloJava をダブルクリックし ( これによって HelloJava が実装されます ) getgreeting() オペレー ションに return "Hello! "+name という行を追加します 11. HelloProcess を実装します ( 図 38 を参照 )

図 38. HelloProcess 図 38 を見るとわかるように Invoke を使って HelloJava を呼び出し Snippet を使って Greeting の値を変更しています 12. Stand-alone References をドラッグ アンド ドロップし Stand-alone References を HelloJava と HelloJavaProcess に接続します ( 図 39 を参照 )

図 39. HelloWorldModule 図 39 に示されたパートナー参照名は SCA コンポーネントへのエントリー ポイントです テスト中には これらの名前によって SCA コンポーネントが呼び出されます SCA のテストを作成する HelloWorldModule をテストする動的 Web プロジェクト HelloWorldModuleTest を作成する手順 は以下のとおりです 1. J2EE パースペクティブに切り替え Project Explorer ビューに表示された Enterprise Applications を展開します 2. HelloWorldModuleApp を右クリックし New > Dynamic Web Project の順に選択します 3. New Dynamic Web Project ダイアログ ボックスで HelloWorldModuleApp のテストに使用する プロジェクトとして例えば HelloWorldModuleTest などの名前を入力します 4. Finish をクリックします 5. HelloWorldModuleTest プロジェクトに対して Cactus でテストするための準備 セクションで説明し た手順を実行します 6. HelloWorldModuleTest (HelloWorldModule に従属 ) は HelloWorldModule に追加する必

要があります それには Business Integration パースペクティブに切り替えて HelloWorldModule を 選択し 右クリックで Dependency Editor を開きます 7. J2EE を展開し Add をクリックして動的 Web プロジェクト HelloWorldModuleTest を SCA モ ジュールに追加します ( 図 40 を参照 ) 図 40. Dependency Editor 8. Web パースペクティブに切り替えて Project Explorer ビューを表示し HelloWorldModule > Java Resources > JavaSource の順に展開します 9. com.ibm.tdc パッケージ内に HelloWorldTest という新規クラスを作成し リスト 15 のコードを貼り 付けます

リスト 15. HelloWorldTest package com.ibm.tdc; import org.apache.cactus.servlettestcase; import com.ibm.websphere.sca.service; import com.ibm.websphere.sca.servicemanager; public class HelloWorldTest extends ServletTestCase public void testhellojava() Service service=(service)servicemanager.instance.locateservice("hellointerfacepartner" ); String greeting = (String)service.invoke("getGreeting", "Rosa"); assertequals("hello From First Java Component! Rosa", greeting); public void testhelloprocess() Service service=(service)servicemanager.instance.locateservice("hellointerfacepartner1 "); String greeting = (String)service.invoke("getGreeting", "Rosa"); assertequals("hello From Process! Rosa", greeting); 上記のコードは testhellojava() メソッドと testhelloprocess() メソッドをそれぞれ使用して 両方の SCA コンポーネント HelloJava および HelloProcess をテストします 各メソッドはサービス マネージャーを使用し パートナー参照名によって SCA コンポーネントにアクセスして getgreeting() オペレーションを呼び出します そしてアサーションによって結果を検証します テスト対象の SCA モジュールを実行する サーブレットのテストを実行する セクションを参照して HelloWorldTest を実行してください セクション 7. Ant スクリプトによるテストの自動化 Ant は Java ベースのビルド自動化用ツールです 今回は Ant を使用して JUnit と Cactus のテス

ト ケースを自動化し テスト結果を XML ファイルに生成します (Ant についての詳細は 参考文献 のリンクを参照 ) JUnit Ant スクリプト 以下は 前に作成した HelloWorldTest を JUnit Ant タスクによって実行する手順です このタスクに よって Java のユニット テスト セクションで説明した HelloWorld Java クラスのユニット テストを実行 することができます 1. build.xml という名前の XML ファイルを作成し Java プロジェクト内に配置します 2. build.xml ファイルにリスト 16 のコードを貼り付けます

リスト 16. JUnit Ant スクリプト <?xml version="1.0" encoding="utf-8"?> <project name="workspace" default="junittest"> <target name="junittest"> <junit printsummary="yes" haltonfailure="no"> <classpath> <pathelement location="bin" /> </classpath> <formatter type="xml"/> <batchtest todir="c:/temp/"> <fileset dir="c:/workspace/helloworldjava"> <include name="**/*test*.java" /> </fileset> </batchtest> </junit> </target> </project> リスト 16 では次の点に注意してください Ant とビルド自動化 Ant ではビルド手順を自動化することができるので IBM Rational Software Development プラットフォーム用の Ant の組み込みサポートによって生産性と品質の両方を改善することができます 詳細については Ant を使ってプロジェクト ビルドを自動的に生成する (developerworks 2007 年 1 月 ) を参照してください 訳注 : developerworks Japan の上記記事の URL は下記のとおりです http://www.ibm.com/developerworks/jp/xml/library/ar-autotask/ <pathelement location="bin"/> は.class ファイル ( テスト対象のクラスとテスト ケース ) の場所を 参照します <junit printsummary="yes" haltonfailure="no"> は JUnit テスト ケースを実行し サマリーを出力

します <formatter type="xml"/> はテスト結果のフォーマットを設定します <batchtest todir="c:/temp/"> は生成されるテスト結果レポートの保存先を指定します <fileset dir="c:/workspace/hellowoldjava"> は Java プロジェクトの場所を参照します <include name="**/*test*.java"> は任意のパッケージ内の Test という単語が含まれるテスト ケー スを参照します **/*Test*.java は com/ibm/tdc/helloworldtest.java に置き換え可能であることに 注意してください 3. Ant を実行するため build.xml ファイルを Ant ビューにドラッグ アンド ドロップします 4. junittest を右クリックして Run Ant を選択します ( 図 41 を参照 ) 図 41. Ant の実行 5. JRE タブを選択し Run in the same JRE as the workspace を指定 ( この JRE で Ant を実 行するよう指定 ) します ( 図 42 を参照 ) 6. Run をクリックします

図 42. JRE の選択 コンソールにテスト結果が表示され 前に指定した保存先にテスト レポートが生成されます Cactus Ant スクリプト 前に作成した HelloWorldServletTest を Cactus Ant タスクによって実行し サーブレットのユニット テスト セクションで説明した HelloWorldServlet サーブレットのユニット テストを行うには 以下の手順 に従います 1. Cactus Ant タスクを実行するため cactus-ant-1.7.2.jar および cargo-0.5.jar を WebContent WEB-INF lib に追加します ( この 2 つの.jar ファイルは この記事の ダウンロード セ クションまたは apache.org からダウンロードすることができます ) 2. HelloWorldEAR を右クリックして Export > EAR file の順に選択し C:/temp/test/HelloWorldEAR.ear を宛先に指定します 3. build.xml という名前の XML ファイルを作成し 動的 Web プロジェクト HelloWorld 内に配置し ます 4. build.xml ファイルにリスト 17 のコードを貼り付けます

リスト 17. Cactus Ant スクリプト <?xml version="1.0" encoding="utf-8"?> <project name="workspace" default="cactustest"> <property name="server.lib" value="c:/websphere/id/602/runtimes/bi_v6/lib"/> <property name="project.lib" value="webcontent/web-inf/lib"/> <path id="test.classpath"> <fileset dir="$server.lib"> <include name="j2ee.jar" /> </fileset> <pathelement location="webcontent/web-inf/classes" /> </path> <path id="cactus.classpath"> <pathelement location="$project.lib/cactus-1.7.2.jar"/> <pathelement location="$project.lib/cargo-0.5.jar"/> <pathelement location="$project.lib/cactus-ant-1.7.2.jar"/> <pathelement location="$project.lib/commons-httpclient-2.0.2.jar"/> <pathelement location="$project.lib/commons-logging-1.0.4.jar"/> <pathelement location="$project.lib/aspectjrt-1.2.1.jar"/> </path> <target name="cactustest"> <taskdef resource="cactus.tasks" classpathref="cactus.classpath"/> <cactus printsummary="yes" haltonfailure="no" earfile="c:/temp/test/helloworldear.ear"> <classpath refid="test.classpath" /> <formatter type="xml"/> <batchtest todir="c:/temp/"> <fileset dir="c:/workspace/helloworld/javasource"> <include name="com/ibm/tdc/helloworldservlettest.java" /> </fileset> </batchtest> </cactus> </target> </project> リスト 17 では次の点に注意してください

<property name="server.lib" value="..."/> はサーバー ライブラリーの場所を参照します <path id="test.classpath"> は j2ee.jar ファイルを参照します <path id="cactus.classpath"> は Cactus.jar ファイルを参照します <taskdef resource="cactus.tasks" classpathref="cactus.classpath"/> は Cactus タスクを定 義し Cactus.jar ファイルを参照します <cactus... earfile="c:/temp/test/helloworldear.ear"> は上記のステップ 2 でエクスポートした 動的 Web プロジェクトの EAR ファイルを参照します 5. build.xml を Ant ビューにドラッグ アンド ドロップし cactustest を右クリックして Run Ant を選択 します 6. JRE タブを選択し Separate JRE を指定します 7. 動的 Web プロジェクトを実行しているサーバーを選択します 例えば WebSphere Process Serve を使用している場合には WPS Server v6.0 JRE を選択してください (WebSphere Process Server テスト環境は WebSphere Integration Developer で使用することができます ) 8. VM arguments に -Dcactus.contextURL=http://localhost:9080/HelloWorld を設定します ( 図 43 を参照 ) 図 43. JRE の分離 9. Cactus Ant タスクには junit.jar が必要なため このファイルを追加する必要があります それには Classpath タブを選択し User Entries をクリックします 10. Add JARs をクリックし HelloWorld WebContent WEB-INF lib junit.jar までブラウズして

OK をクリックします これで junit.jar が User Entries リストに追加されます ( 図 44 を参照 ) 図 44. User Entrie への junit.jar の追加 11. Run をクリックします テスト レポートが Ant スクリプトで指定された宛先に表示されます セクション 8. まとめ このチュートリアルでは JUnit および Cactus フレームワークを使用してユニット テストとコンポーネント テストを実行する方法を説明しました さらに IBM Rational ツールで Ant スクリプトによってテストを自 動化する手順も紹介しました

セクション 9. 謝辞 このチュートリアルをレビューして貴重な提案をしてくださった Ahmed Abbas Dr. Alaa Youssef そして Mahmoud Ouda の各氏に感謝します 内容ファイル名サイズダウンロード形式 Test files for this tutorial sample.zip 2.7MB HTTP 著者について Rosaline Makar Rosaline Makar は IBM Egypt Cairo Technology Development Center (C-TDC) のソフトウェア エンジニアで 現在は SOA Web サービスなどの分野に取り組んでいます コンピューター工学で理学士号を取得した彼女は 現在コンピューター サイエンスでの理学修士号を取得すべく準備中です 商標 IBM IBM ロゴ Rational および WebSphere は International Business Machines Corporation の米国およびその他の国における商標です Java およびすべての Java 関連の商標およびロゴは Sun Microsystems, Inc. の米国およびその他の国における商標です