MaterialsEN中文ホームブログ技術ブログ工数削減!GroovyでJUnitをシンプルに工数削減!GroovyでJUnitをシンプルに作成日:2015/07/29更新日:2018/07/11技術ブログプログラミングJavaはじめまして。Javaエンジニアの方なら、一度はJUnitでテストケースの実装を行ったことがあると思います。一度作ってしまえば便利ですよね。実装した処理を手元で手早く確認したり、リファクタリング前後での挙動変化が無いことを確認したり。一度作ってしまえば便利。一度作るまでが大変なんです。本質的な確認を行うテストケースになっていなかったり・・・。そんなテストケースくらい、楽して書きたいものです。Java」なGroovyの出番です。流行りのgradleにも利用されていますね。GroovyとはJVM上で動作する、Java互換の動的スクリプト言語です。以下のように、Javaでは冗長になりがちな処理を非常に短く記述できるという特徴があります。BeanGroovy側からの呼び出しからに限り、既存メソッドを動的にオーバーライド可能privateメソッドの直接呼び出しが可能(静的コンパイルをしない場合に限る)如何でしょうか。等価の処理をとてもシンプルに記述できますね。この性質を利用して、実際にJUnitを記述してみましょう。GroovyプラグインのインストールEclipseのメニューより、[ヘルプ]->[新規ソフトウェアのインストール]と進み、以下の表より手元のEclipseのバージョンと合致するものをURL欄へ入力してください。http://dist.springsource.org/release/GRECLIPSE/e3.7/以下のように選択し、後は「OK」を選択してください。完了後、Eclipseの再起動を求められますので、再起動してください。Project]を実行してくださいテストクラスの実装テスト対象のクラスとして、以下のようなPersonクラスおよびそれを扱うUtilクラスをJavaで作成しました。}}まず、普通にJavaで記述したテストコードは以下の通りです。}}こちらに載せるのが躊躇われるほど長いコードです。同様の物をGroovyで書いたのが以下です。}}この規模のコードでも400文字ほど簡略化されています。先例の通りListやMapの初期化が簡潔なため、スッキリとした見た目であることがおわかりいただけると思います。test_getBosses()の例では、Personクラスのequalsメソッドを動的にオーバーライドすることにより、assertが1行にまとまっています。プロパティ構文の存在により、getterを明示的に呼出さなくて良い点も見た目をシンプルにしています。commonsのEqualsBuilder.reflectionEqualsに置換えれば更に簡略化も可能ですね。※ただし、オーバーライドしたequalsが呼び出されるのは、GroovyTestCase.assertEqualを使用した場合です!さらに細かい所では、以下の相違点もあります。最後に如何でしたでしょうか。コンパイル、テストの実行を行うためのbuild.gradleも掲載しておきます。'4.4'}GroovyでJavaをテストするという切り口では、さらに発展させたBDDフレームワーク「Spock」という物もありますが、こちらはJUnit4.7以上を要求します。残念ながら使用できませんが、Groovy単体でもだいぶシンプルに記述できる事がお分かりいただけたかと思います。経験の浅いメンバーにとって、普段業務で触っている以外の言語に触れる事への心理的な障壁を下げるという効果も期待できるのではないでしょうか。テストコードの自動生成も楽になりそうですね。JavaなJVM言語は他にも色々とあるため、皆様にとって何かの参考になれば幸いです。MaterialsEN。