SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

Javaで軽快に使える「軽量フレームワーク」特集

Javaで軽快に使える「軽量フレームワーク」特集
~本格的なRoRスタイルフレームワーク「Play!」(3)

第9回

data.ymlによるテストデータの生成

 しかし、前ページのようにいちいちモデルクラスのインスタンスを作成するコードを書いてチェック...となると、たくさんのデータを生成したりするのがけっこう面倒になります。また、データの内容を変更したりしてチェックを行うのもいちいちコードを書きなおさなければいけません。できれば、生成するモデルの内容はコードとは切り離しておきたいでしょう。

 Play!の場合、「test」内に用意されている「data.yml」というファイルに、生成するモデルに関する情報を記述しておくことで、それをもとにデータを自動生成させることができます。実際にやってみましょう。

PersonData(tuyano):
  name: tuyano
  mail: tuyano@mac.com

PersonData(taro):
  name: taro
  mail: taro@yamada.com

MsgData(msg1):
  message: Hello
  person: tuyano

MsgData(msg2):
  message: Good-bye
  person: taro

 data.ymlを開き、このように記述しましょう。data.ymlでは、生成するモデルを次のような形で記述していきます。

モデル名 ( インスタンス名 ):
  プロパティ名: 値
  プロパティ名: 値
  ……以下略……

 ここでは、PersonDataとMsgDataをそれぞれ2つずつ用意しておきました。またMsgDataの記述部分を見れば分かるように、他のモデル(ここではPersonData)をプロパティに設定する場合には、インスタンス名を値に指定します。では、このdata.ymlを使ってデータを作成する形でテストメソッドを作成してみましょう。

@Test
public void testFullData() {
	Fixtures.load("data.yml");
	assertEquals(2, PersonData.count());
	assertEquals(2, MsgData.count());
}

 Fixtures.loadを呼び出すことで、data.ymlをロードし、それをもとにモデルを生成します。assertEqualsで、PersonDataとMsgDataがそれぞれ2つずつ生成されていることをチェックしています。問題なくモデルが作成されていれば、assertEqualsはエラーにならず正常にテストを終了します。

FunctionalTestを実行する。追加した2つのメソッドも正常に動作していることが分かる
FunctionalTestを実行する。追加した2つのメソッドも正常に動作していることが分かる

SeleniumTestのソースコード

 残るSeleniumTestは、ビューで用いられるHTMLベースのテンプレートファイルに特殊なタグを埋め込むことで実行されるものです。これは、Webページをロードしてテストを行うものです。デフォルトで作成されている「Application.test.html」ファイルを見ると、次のようなサンプルコードが書かれているのが分かります。

#{selenium}
	open('/')
	waitForPageToLoad(1000)
	assertNotTitle('Application error')
#{/selenium}

 SeleniumTestは、#{selenium}#{/selenium}タグの間にコードを記述して実行します。ここでは、それぞれ次のようなことを行っています。

  • open('/')'/'のアドレスをロードします
  • waitForPageToLoad(1000):ページがロードされるまで待ちます
  • assertNotTitle('Application error'):ページタイトルが'Application error'でないかチェックします

 このようにして、'/'のWebページが正常にロードされていることをチェックしているわけです。このように、#{selenium}タグを使い、スクリプトを記述することで、特定のアドレスのWebページをロードし動作チェックを行うことができます。

次のページ
addにアクセスしPOST送信するテスト

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

Javaで軽快に使える「軽量フレームワーク」特集連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4752 2010/02/04 14:00

イベント

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

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

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

メールバックナンバー