PlayFrameworkでTDDのマネをしてみた

自分用の小さな開発案件にPlayを使ってTDDを真似てみようと思いました。
とりあえずModelのテストからと書き始めたところ…

//Model
@Entity
public class Company extends Model{

}

//Test
public class CompanyTest{

    @Test
    public void testSomething(){
        Company c = new Company();
        assertNotNull(c);    
    }
    
}

これだけでも@TestアノテーションがあればJUnitでテストを実行することはできます。
ただ、これだとfindAllなどのJPAJava Persistence API)の機能を使うと下記のエラーが発生します。

UsupportedOperationException occured : Please annotate your JPA model with @javax.persistence.Entity annotation

エラーメッセージだけを読むと@Entityを使えとしか書いていないので、「ちゃんと@Entityってあるじゃん!?」と少しはまりました。原因はJPAの機能を利用する側(テスト用のクラス)がPlayFrameworkに対応していないとダメなので、きちんとplay.test.UnitTestをextendsしておく必要がありました。最初からドキュメントを読んでおけばこんなことにはならないです。。

import play.test.*;
public class CompanyTest extends UnitTest{
//...
}

Fixtureからデータを読み込むには、testパッケージの配下にあるdata.ymlにYAML形式でデータを追加してからFixtures.loadModulesで読み込む必要があります。

# Test data
Company(google):
   name:    Google
 
Company(zen):
   name:    Zenexity
@Before
public void setUp(){
  Fixtures.deleteAll();
  Fixtures.loadModels("data.yml");
}

http://ja.wikipedia.org/wiki/Java_Persistence_API
http://www.playframework.org/documentation/1.2.3/test