技術開発日記

技術やら日々思ったことを綴ってます。

Junit4.4

JUnit4.4の新機能について以下のことが言われているらしいので少し。


問題1.そもそも、assertThatとか必要なのか?今まで通りassertEqualsやassertTrueでいいのでは?
問題2.仮にassertThatといった新機能を使って実装した場合、実装した人は良いが、それを知らない人が見た場合にそれを理解するコストとかも考えないといけないのでは?


問題1に対して。
いろいろ調べてみると、asssertThatを使うメリットとして、可読性が高くなったり、テストが失敗したときのメッセージが丁寧だったりと、いろいろあるらしい。
ただそれとは逆に、英語脳でないと可読性とか意味ない、クラス同士の比較が困難(Matcherの独自拡張で可能)、といった問題点もあるそうだ。

そこで自分でも少し書いたり見たりしたが、正直、可読性とメッセージに関してはそんなには変わらない気がする。
ただ、ずっとassertEqualsに慣れていたからか、若干違和感があるかもぐらい。
あとはMatcherの存在が結構大きいかもしれない。
これがあるお陰で独自の比較とかができるようになるから、例えば日付の「分」とか「秒」を比較したくない場合にはこれを実装して使えばそれが解決できる。
イメージ的にはComparatorを実装する感じだと思う。


なので、結局assertThatを使わないとダメかと言ったら、そんなこともないんだろうな。
たけど、例えばjavaのバージョンを今でも4系を使いますかって言ったら、やっぱり使わないし、5系、6系って上がるたびに導入を考えるはず。
それと同様にJUnitも少しでも上位バージョンがあるのならそれをどんどん使うべきだし、それが主流になっていくようにするのが理想的なんじゃないかなって思う。
もちろん、フレームワークとの相性や関連するミドルウェアの関係で安定版の方を使った方が良いといった場合は違うかもしれないけど。


問題2に対して。
個人的には知らない機能を勉強するコストもそもそも考慮すべきだと思うし、それを含めての工数を考えるべきだと思う。
というより、そもそもJunitぐらいならそんなにコストってほどコストが掛からないのでは?って思ったりもする。