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

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

JUnitの改良にみるコーディングの極意

JUnitは昔からassertEqualsだと思っていましたが

JUnit4.4からassertThatに変わったようです。

以前だと

assertEquals("bean", bean.getId());

としていたものが

assertThat(bean.getId(), is("bean"));

となります。

機能的には微妙によくなった部分もあるのですが

基本的に同じです。


ではなぜassertThatに変えたのか?

JUnitのリリースノートで最初に挙げられているのは

More readable and typeable

つまりコードが読めるということです。


以前のインターフェースだと

assertEquals(expected, actual)

ですが、第一引数と第二引数をよく間違えます。

ネットを見ても間違えているものがよく見受けられ

どちらが正しいのか混乱します。

assertThatだと普通の英語と同様に読めます。

リリースノートのサンプルだと以下のようなものも

挙げられています。

assertThat(x, is(not(4)));
assertThat(responseString, either(containsString("color")).or(containsString("colour")));
assertThat(myList, hasItem("3"));

どれも英語として読めますね。


これが重要なのです。

長年保守するコードは自分も他人も読みやすいことが

非常に重要です。

クラスを設計するときに考えなくてはならないことは

これなのです。

コーディングやコードレビューでもそうです。