PlayのScalaアプリケーションでテストを実行してみる
こんにちは、even_ekoです。
今日は、play frameworkでのユニットテストの実行の仕方について書きます。
play frameworkのユニットテスト
play frameworkには、ユニットテストをするための環境が組み込まれています。
なので、簡単にユニットテストを実行できます。
使用できるテストフレームワークに制限はないですが、Javaの場合はJUnit、Scalaの場合はSpecs2が、本家(ScalaTest)で説明されています。
ScalaアプリケーションをSpecs2でユニットテスト
Specs2(etorreborre/specs2 @ GitHub)はBDDを促進させるツールです。
BDDの詳しい概念は理解してないですが、文章を書くような感覚でコードを書きます。
実際のコードを見たほうが、分かりやすいので以下に書きます。
テストの内容は、モデルからList[Map[Symbol,Any]]型の変数を取り出し、それのキーを確認するという内容です。
まずは、モデルのソースコードです。
APP_ROOT/app/models/users.scala
package models case class Users() object Users { def get() : List[Map[Symbol,Any]] = { List(Map('name -> "猫", 'message -> "にゃ〜"), Map('name -> "犬", 'message -> "わん"), Map('name -> "牛", 'message -> "もぉ〜") ) } }
次に、テストコードです。
APP_ROOT/test/UsersSpec.scala
package test import org.specs2.mutable._ import play.api.test._ import play.api.test.Helpers._ import models._ class UsersSpec extends Specification { "Users Model" should { "be get all users" in { running(FakeApplication(additionalConfiguration = inMemoryDatabase("hellowtest"))) { val users = Users.get() users.map { users => users must have key('name) users must have key('message) } } } } }
これで、モデルからの情報usersがnameとmessageというキーを持っているかどうかテストできます。
ScalaアプリケーションをJUnitでユニットテスト
本家(ScalaTest)では、specs2でのテスト方法しか書かれていませんでしたが、JUnitを用いてテストを実行することもできます。
以下がテストコードになります。
APP_ROOT/test/UsersTest.scala
package test import org.junit._ import Assert._ import models._ class UserSpecJunit { @Test def UsersModelHasKey() { val users = Users.get() users.map { user => val key = user.keys assertEquals(key,Set('name,'message)) } assertEquals(users.head.apply('name),"Mario") } }
specs2は、あまり使ったことがないのでJUnitの方がしっくりきます。
参考
[1]http://www.playframework.com/documentation/2.1.0/Home
[2]http://etorreborre.github.com/specs2/