連載
» 2013年09月09日 18時00分 UPDATE

Javaの常識を変えるPlay framework入門(6):Playの充実したテスト環境で行う5種のテスト (1/3)

サーブレット/JSPを基にする重厚長大なJavaのWeb開発のイメージを変える軽量フレームワーク「Play」について解説し、Webアプリの作り方を紹介する入門連載。今回は、シンプルな単体テストに加え、ビューやコントローラ、routeファイルのテスト、ブラウザテスト、テスト用の環境設定について解説します。

[今泉俊幸,ビーブレイクシステムズ]

 前回「Playで体得するRESTfulアーキテクチャの基礎知識」までの本連載で、Play frameworkのMVCモデルを解説し、簡単なアプリケーションを作ることができるようになりました。

 今回は、作成したコードに対してテストを書いていきます。

 連載第1回「Java開発で泣かないためのPlay frameworkの基礎知識」で述べたとおり、Play frameworkでは「スピード感」と「変更に対する強さ」を重視しており、ビューやコントローラのテストコードが容易に書けるようになっています。

 また、テスト用に環境設定を変更し、接続先データベースを差し替えるといったことも簡単にできるようになっています。Play frameworkの高速で快適なテストを体験してください。

 今回の主な内容は以下の通りです。

  1. 最もシンプルなテスト
  2. ビューのテスト
  3. コントローラのテスト
    1. コントローラの呼び出し
    2. フォーム入力値の設定
  4. routeファイルのテスト
  5. ブラウザテスト
    1. テストサーバの起動
    2. ブラウザに対する操作
  6. テスト用の環境設定

 上記内容について、連載第4回の「Play frameworkのコントローラの使い方を理解する」で作成した占いアプリに対しテストコードを書いていきます。第4回のサンプルアプリを作成していない方は、作成しておいてください。

最もシンプルなテスト

 まずは、ビューやコントローラを使わない、単純なテストを書くことで、Play frameworkのテスト実行方法を見てみます。

 testフォルダにSimpleTestクラスを作成してください。

import static org.fest.assertions.Assertions.*;
import org.fest.assertions.StringAssert;
import org.junit.Test;
public class SimpleTest {
	@Test
	public void simpleTest() {
		String str = "hoge";
		StringAssert assertion = assertThat(str);
		assertion.isEqualTo("hoge");
	}
}

 なお、testフォルダにはPlay frameworkプロジェクト作成時に自動生成されたサンプルクラスがありますが、今回の説明には使用しませんので、削除しておくことをお勧めします

 このテストを実行するためには、コンソールで以下のコマンドを実行します。

play test
play6_1.jpg

 添付画面のように、「Passed」が1、「Failed」「Errors」が0となっていればテスト成功です。

 詳細なテスト結果は「target/test-reports」以下に配置されます。

 Eclipseからであれば、SimpleTest.xmlを右クリック→[次で開く]→[JUnitビュー]を選択することでテスト結果を確認できます。

play6_2.jpg

 では、今書いたテストコードを順に見ていきます。

 まず、テストメソッドであることを示すために、メソッドに@Testアノテーションを付けます。Play frameworkのテストでは通常、JUnitが利用されますが、これはJUnitの記述ルールに則っています。

 次にテストメソッド内のアサーションについてです。JUnitで用意されているメソッドを利用することもできますが、Play frameworkには「FestAssert」という便利なアサーションライブラリが備わっています。

 値比較の場合、JUnitでは通常、次のように記述して検証対象(actual)と値(expected)を比較します。

assertEquals(actual, expected);

 一方、Play frameworkが利用するFestAssertライブラリでは、検証対象の値の型に応じたAssertクラスのオブジェクトをいったん取得することでさまざまなメソッドを利用できるようになります。

 Assertクラスのオブジェクトを取得するには、org.fest.assertions.AssertionsクラスのassertThatメソッドを用います。

 assertThatメソッドはオーバーロードされており、検証する型に応じたAssertクラスを返します。今回のように文字列をassertThatメソッドに渡すと、StringAssertという文字列用のAssertクラスが返されます。

 どの型に対しても利用できるAssertクラスのメソッドとしては、以下のようなものがあります。

メソッド 機能
isEqualTo(Object expected) equalsメソッドの呼び出し結果がtrueかどうか
isNull() 検証対象のオブジェクトがnullかどうか
isIn(Collection expected) 検証対象のオブジェクトが引数のコレクションに含まれるかどうか

 StringAssertでは、以下のようなメソッドをさらに利用できます。

メソッド 機能
isEqualToIgnoringCase(String expected) equalsIgnoreCaseの呼び出し結果がtrueかどうか
contains(String expected) 検証対象の文字列に引数の文字列が含まれるかどうか
containsIgnoringCase(String expected) 検証対象の文字列に引数の文字列が含まれるかどうか(大文字小文字の違いを無視)

 また、isEqualsToメソッドについても、引数の型がStringに限定されるようになります。

 なお、今回はサンプルのためAssertオブジェクトを1度変数に格納しましたが、以下のように一度に記述するほうが一般的です。

assertThat(actual).isEqualTo(expected);
       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。