読者です 読者をやめる 読者になる 読者になる

C Sharpens you up

http://qiita.com/yuba に移しつつあります

Play!のEbeanモデルをJUnitでテストするとき"It has not been enhanced"エラーを防ぐ

Play! 2.x

Play!のJava向けO/RマッパーであるEbeanはコンパイルに介入するタイプのフレームワークです。
具体的には、Ebeanモデルがコンパイルされたあとに、getter/setterを勝手に作成して埋め込んでくれます。これが、単にpublicフィールドを書いただけで遅延アクセスをやってくれる仕組み。

ところが、IntelliJEclipseJUnitプラグインはそこら辺の事情を知らないので、テスト実行時に自力でコンパイルし、ただのJavaオブジェクトにしてしまいます。そしてこける。
"It has not been enhanced"
というランタイム例外が飛びます。enhanceってのがそのgetter/setter生成動作のことですね。

JUnit実行のたびにplay cleanしてplay compileしなおすとかたるくてやっていられないのでJUnitプラグインに正しいEbeanの扱い方を教えてあげましょう。

ネタ元はこちら

1. プラグインを使う

http://plugins.jetbrains.com/plugin/?idea&id=4431
Ebean weaverをIntelliJに入れます。これで解決。

2. javaagentコンパイルオプションを指定する

JUnitプラグインの設定にコンパイルオプション設定があります。ここに
-javaagent:/フルパスで/avaje-ebeanorm-agent.jar
と設定してあげます。これでも解決。