SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Javaの単体テストでランダムなデータを活用する

QaRandomizerを利用し、ランダムデータを用いた単体テストを実行

  • このエントリーをはてなブックマークに追加

 従来、ランダムデータを使用するのは、手間が大きすぎて価値に見合わない作業でした。しかし、QaRandomizerを利用すればランダムデータの威力をテストで簡単に生かせます。本稿ではQaRandomizerが生成するランダムなデータを使った基本的な単体テストや、モックオブジェクトを使用した単体テストの方法について説明します。

  • このエントリーをはてなブックマークに追加

はじめに

 規則性と不規則性が共存しているのが、世の中の面白い所です。例えば、米国の北東部の気候では、冬は寒く、夏は暑くなります。毎日の気温は不規則に変化しつつも、季節が全体として寒いか暑いかという傾向は変わりません。

 従って、例えば不凍液など、気温の影響を受ける製品をテストするときには、特定の決まった温度だけで行うよりも、一定の範囲内のランダムな温度で行う方が、正確度は高まります。

 ソフトウェアも同じです。通常、ソフトウェアはさまざまに変化する条件の下で動作します。従って、単体テストを作成するときには、所定の範囲内のランダムなデータを使用する方が賢明です。しかし実際には、基本的な単体テストでは、テストデータをハードコーディングしてしまうことが多いのではないでしょうか。基本的な単体テストであれば、ハードコーディングの方が時間を大きく節約できるし、リスクもさほどないとの思いからです。

 しかし私は異を唱えたいと思います。単体テストにランダム性を取り入れるのは簡単ですし、時間も特にかかりません。しかも、短期的にも長期的にも、テストの価値が高まります。そこで紹介したいのが、私が作成したJavaベースのツール「QaRandomizer」です。一定のパターンとデータ構造にのっとったランダムな値を、すばやく簡単に生成できます。

 QaRandomizerでは次のデータを生成できます。

  • 米国のランダムな郵便番号と、その番号に対応する州および市
  • ファーストネーム(名)、ラストネーム(姓)、フルネーム(氏名)、またはメールアドレス
  • 文字構成と長さがランダムな文字列

 QaRandomizerには、同じ型のオブジェクトを集めたリストからランダムな項目を抽出するヘルパーメソッドもあります。

 この記事では、QaRandomizerが生成するランダムなデータを使った基本的な単体テストや、モックオブジェクトを使用した単体テストの方法について説明します。この記事で説明する考え方は広く応用できるものですが、記事内の例はJavaで作成し、用意したサンプルコードはMavenの親プロジェクトと子プロジェクトという形となっています。従って、例やサンプルコードを実際に試してみる場合には、オブジェクト指向プログラミング、Java、Maven、テスティングフレームワークTestNGについての知識が必要です。

postal-serviceプロジェクトの説明

 この記事のサンプルプロジェクトはpostal-serviceというものです(記事上部のリンクからpostal-serviceとQaRandomizerのMavenプロジェクトのソースコードをダウンロードできます)。postal-serviceは、郵便物の送付に利用するアイテムとサービスを表すオブジェクトで構成されており、各オブジェクトは次のように使用します(図1を参照)。

  • Letter(郵便物)オブジェクトを作成し、PostOffice(郵便局)オブジェクトを使用して切手の貼付と送付を行う
  • Stamp(切手)オブジェクトはPostOfficeオブジェクトから購入する
  • Letterオブジェクトの差出人と受取人の指定にはAddress(住所)オブジェクトを使用する
  • PostOfficeが行うサービスには、Letterの送信に加えて、Email(電子メール)の送信もある
  • PostOfficeオブジェクトは、LetterオブジェクトとEmailオブジェクトの転送を容易にするために、PostalDispatcherインターフェースを使用する
図1 postal-serviceのオブジェクトモデル:postal-serviceは、郵便物の送付に利用するアイテムとサービスを表すオブジェクトで構成されている
図1 postal-serviceのオブジェクトモデル:postal-serviceは、郵便物の送付に利用するアイテムとサービスを表すオブジェクトで構成されている

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
単体テストでありがちな落とし穴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Bob Reselman(Bob Reselman)

Edmunds Incのシニアテクニカルライター兼テクニカルエディター。Edmunds Inc.は、多彩な情報と高い可用性を誇る、最先端のJavaベースの各種自動車情報Webサイトを運営する大手パブリッシャーである。http://www.edmunds.com/およびhttp://www.insid...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4908 2010/03/03 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング