EBeanでもユニットテストの導入はスマートです。移しつつありますこの広告は、90日以上更新していないブログに表示しています。2013-12-06EBeanでもユニットテストの導入はスマートです。2013*1の6日目です。Javaのユニットテストを書きやすくできますよという話。Java使っている方なら当然、永続化はEBeanですよね。name;}でO/Rマッピングしたとしましょう。このエンティティクラスを使って要求を処理するビジネスロジックを書きます。ビジネスロジックにはユニットテストも書きましょう。ユニットテストはDBの現在状態に依存したりDBに変更を加えたりしてほしくありません。テストのときだけインメモリのH2を使おうかというと、ここで定義したテーブルには出てこないのですがスキーマの他の部分ではPostgreSQLに依存した設計をしてしまっていてH2では代わりにならない状況です。ここで我々はこう考えます。「そうだ、エンティティクラスというフレームワーク独自のクラスにビジネスロジックが依存してしまっているのがそもそもおかしいんだ。手を動かそうとしたらすぐ固まります。「フィールドはインターフェースに抽出できないじゃないの...」ここ泣くところです。Beansと決別してあのgetter/setterのいらないプログラミングを提供してくれました。インターフェースの抽出をしようとするとJavaは冷酷にもgetter/setterを使ったアクセスしかないよねと迫ってくるのです。醜く変貌したエンティティクラスを一応書きました*2。}}そこでLombokしかしです。絶望だらけのこの世にもLombokがある。iwanagaを見てもらえばわかりますが、Javaによくある冗長な記述をコンパイラに介入する黒魔術でガンガン省略させてくれるアノテーションライブラリです。これを使えば、getter/setterはコードに書かなくてもいいということです。いいじゃん!コンパイラに介入するという点ではEBeanもそうなので*3、てっきりEBeanとLombokは共存できないものと思い込んでいました。ところがやってみたらあっさり共存できてしまった次第。絶望する必要なんて、ない。2.0/2.1ならBuild.scala、2.2ならbuild.sbtで依存にLombokを追加します。"1.12.2",実はこれだけでビルドファイル的には準備完了なのですがIDEが理解してくれないといろいろ赤波線とかあれですから、プロジェクトファイルを作り直してIDEにもLombokライブラリを参照してもらいます。IDEAの場合さらに、プラグインとしてLombokをリポジトリから探してインストールします。改善後あの醜かったエンティティクラスはこう書き換えられます。name;}最初のクラスに比べると@Dataの記述が加わっただけですね。シンプル!EBeanの崇高な理想は守られました!その他インターフェースの抽出をした場合、ファクトリメソッドの書き方に困る場合があります。fetchAll();に書き換えようとすると、その内部処理で詰まります。List<Item>はList<IItem>にキャストできないから。fetchAll();というシグネチャにすると幸せになれます*4明日は@aimluck_iwasakiさんがサブプロジェクトや運用の話題をとのことです。Calendarとはクリスマスまでのカウントダウン日めくりのことで、それになぞらえて12/1から12/25まで日替わりで参加者がブログ記事を寄稿するイベントです。*2:IItemっていう命名センスがそれC#だよねってのはちょっと目をつぶっててください。*3:Lombokはコンパイルの途中(構文木ができたところで構文木にgetter/setterを差し込む)、EBeanはコンパイル後(.classファイルができてから.classファイルにgetter/setterを差し込む)なのでやっていること同じとは言え過程が全然違うんですけどね。*4:IBMの出してる解説記事ではそういうのやめろよと言われちゃってますが。C")もしくは、「Iterable<Number>にIterable<Double>を代入したいっ!」。6検索はてなブログをはじめよう!Sampoさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。