kagamihogeの日記

kagamihogeの日記です。

JUnit実践入門 体系的に学ぶユニットテストの技法

イマサラJUit 4よく知らないんですよね、とは言い出しにくい情勢なので本書を手に取った。さすがに実践入門と銘打たれてるだけあり、明日すぐ使えるような構成になっている。実践的だと感じたのは大きく二つの理由からなる。一つは、JUnit 4の各機能をサンプルコードと共にこういう状況でこれを使えと指針があること。一つは、テストケースをどのように作っていけばよいのかについて指針があること。もちろん、どちらも本格的な理論の域にまでは達していないが、まず使い始めるには充分な記述量だと思われる。

本書読むまで存在知らなかったJUnitの機能を見ていると、フツーにJUnit使ってしばらく経つと困る点が順次解消されてるんだな、という印象を受ける。Encloseでテストケースまとめるのとか、Categoriesでテストケースの分類と実行とか、そのへん。本書の良いとこは、ただasssertの使い方紹介して終わり、でなく、大量にテストケース作っていけばぶつかる点とそれに対処するにはJUnitのこの機能使いましょう、という書き方になっている点。細かいことはともかくまずはJUnitのこの機能こんな感じに使って頑張ろうぜ、という指針であり、単純ではあるが取り組み始め人間にとっては強力な考え方であろう。

機能の使い方だけではテストケースは書くことができず、テストケースをどのように組み立てればよいのか、という問題がある。本書のアプローチとしては、共通のデータに着目する、同値クラス分析で入力と出力の組み合わせからテストケースを作る、など。これもやはり簡易なものでしかないが、最初は意外と何をテストケースとすべきか分からないものなので、まずはこうやっとけ、っていう書き方には好感を覚える。俺自身、コピペすればいくらでもテストケース増やせることに悩んだ時期があるので、ユニットテストの基本かくあるべしという本書のアプローチは参考になった。

以上二点のように、大雑把な指針を示しているのが実践入門という名前に繋がっているのだな、と俺は感じた。もちろん、上級者はそれらの指針に従う必要は無い。より高度なことをしようとしたとき、基本から逸脱するのは自然なことと考えられる。また、テストそのものの学習ははじめて学ぶソフトウェアのテスト技法等で別途行う必要がある。が、まずはユニットテストを好きになってから、というのは現実的なアドバイスだろう。

個人的にちょっと驚きだったのがDbUnitなりなんなり、クラス以外のミドルウェアに依存するテストも単体テストで扱う世の中になってしまってるんだなぁ、というところ。俺が本格的にユニットテストを勉強するきっかけになったレガシーコード改善ガイド - kagamihogeのblogでは、ユニットテストはクラス単体で動かせるテストであること、という思想だったと記憶している。なぜなら、すばやいフィードバックが得られないから。

当然、本書もスローテスト問題なを切り口として、原則的にはユニットテストは外部依存しないことが望ましい、という書き方ではある。しかし、現実的にはDBなりミドルウェア前提の機能も多いので、それに合わせてユニットテストに対する認識も変わってきている、といったとこなんでしょうかね?

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)