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

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

JavaでBDDなど

RubyだとRSpecがありますしJavaScriptでもmochaなんていうものがあり世の中の流れはBDDのようです。Javaではどうなんだろうということで調べてみたらいろいろ見つかりました。

JBehave

.storyファイルに自然言語で記述します。それをアノテーションでテストクラスのメソッドマッピングするようになっています。

Spock

groovyのBDDフレームワークです。Javaでも使えます。

JSpec

名前からわかるとおりRSpecにインスパイアされたフレームワークです。a,the,it,shouldといったメソッドがあって自然言語ぽく書けるようになっています。

JSpecの提供元は他にもActiveJDBCやActiveWebといったフレームワークを出していてなかなか興味深いです。いずれもActiveRecordRailsにインスパイアされたものです。

ActiveJDBCの特徴はActiveRecord同様Modelクラスにインスタンス変数がないところです。Javaだと普通はこれだとコンパイルができません。ではどうするかというと、文字列です。メソッドの引数にフィールド名を文字列で指定します。まあそうなりますよね。

メリットとしてはコードが少なくて済みます。デメリットはIDEで自動補完ができなくなることと、コンパイルによるチェックができず指定を間違えたらランタイムエラーになるということですね。

オイシックスではHibernateですがテーブルとModelクラスは同じ、ModelクラスはHibernateToolsを使って自動生成、自動生成したソースはいじらないで自作メソッドは継承して実装、HQLは使わずcreateSQLQueryでネイティブSQLを使うようにしている、ということもあってどっちが便利かとなるとHibernateも捨て難い感じです。リレーションシップも面倒くさいわりに恩恵が少ないので使っていません。関連オブジェクトの取得は自作メソッドを作ります。