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はエラーにならず正常にテストを終了します。
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ページをロードし動作チェックを行うことができます。

