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などのJPA(Java 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