torutkのブログ

ソフトウェア・エンジニアのブログ

Java読書会BOF「JUnit実践入門を読む会(第4回)」を実施しました

本日は、Java読書会BOF主催の「JUnit実践入門を読む会(第4回)」を実施しました。

参加者は14人、今回の課題図書(JUnit実践入門)から参加の人も3分の1ほどおり、会の活動としても活性化していると喜んでいます。

今日は、第10章(p.162)から第12章(p.218)までを読み進めました。議論も途中たっぷりとできてしっかり脳に汗をかきました。

10章のカテゴリ化テストは、スイートクラスを手で書くのは手間でIDEの支援がない今は積極的に使うことはなさそうに思います。CI(継続的インテグレーション)で自動実行するときに遅くてこまったときの対策の1つとして、後付でカテゴリを付けていくのに使うかもしれないなという感触です。

議論沸騰箇所は、p.164の「ソフトウェア開発で最もコストが高いのは人件費です。たかだか10万円程度のテスト用マシンを導入することで開発が円滑に進むのであれば・・・」です。

いや、人件費と固定資産費は同じ土俵では比較できないよ、計算機の購入のために稟議を通すまでにかかるコストといったら大変、困ったときにすぐ購入できないよ、など、日ごろの不満(?)が噴出しました。

11章のテストダブル(スタブとモック)では、ツールとしてMockitが取り上げられていましたが、JMockitという強力なツールもありますと紹介しました。ちなみに、JUnit実践入門のMockitのサンプルコードをJMockitで書いたらどうなるかについて解説しているブログが世の中にはありました。

http://bati11blog.hatenablog.com/entry/2013/02/27/201705

Mockitの書き方

when(stub.get(0)).thenReturn("Hello");
when(stub.get(1)).thenReturn("World");
when(stub.get(2)).thenThrow(new IndexOutOfBoundsException());

JMockitの書き方

new NonStrictExpectations() {{
    stub.get(0); result = "Hello";
    stub.get(1); result = "World";
    stub.get(2); result =  new IndexOutOfBoundsException();
}};

となります。

Mockitの場合、voidメソッドの場合は上述の書き方ができないので、doReturnやdoThrowのような別な記述法で使い分けがいるとのことです。

第12章のデータベースでは、テスト用にH2 Databaseが紹介されていました。各種SQLの方言に対応しているというすばらしいテスト向きのデータベースだそうです。

読書会後の2次会は、12名参加で川崎駅近くの居酒屋で行いました。(3200円/人)

さて、次回は7月13日(土)の開催です。Java読書会BOFのWebサイトで参加者募集中です。

(追記)Java読書会参加ブログ

うれしいことに、Java読書会BOF参加者の方にブログを書いていただきました。
http://emamotor.blogspot.com/2013/06/java-reading-bof-junit-4th.html