webアプリケーション開発で個人的に重視しているテストの話
Slackでテストの話について盛り上がったので、webアプリケーション開発で個人的なテスト毎の優先順位などについて書きたいと思います。 早速本題に入りたいと思います。
Controller
コントローラーの処理をホワイトボックステストする利点は少なく、ブラックボックステストの方がいいと思います。
特にE2Eテストはとんでもなく変更コストが高いので割と否定派です。 サービスの根幹をなす部分に関してのみ絶対の信頼を担保したい場合書く、というくらいでいいと思います。
E2Eテストについて書いた記事もありますので詳しく見たければそちらもご覧ください。
コントローラー周りのテストとして、アクセスして期待したstatus(200番など)か観測する、という単純なテストならコストがかなり低くメリットもあると思っているので割と書くことが多いです。
Model
やはりwebアプリで一番重要なテストはモデルのテストです。
システムは全ての箇所でモデルを操作することになりますし、システムで一番重要なのはいかにデータを操作するかです。 ですのでモデルをテストするだけで全体のテスト網羅率は跳ね上がり正確性を担保できます。 モデルテストを全然書かないシステムは最悪です。 一番根幹の部分が担保されていないシステムはガタガタになってしまうからですね。
View(UI)
UIテストに関してはほぼ書くことはありません。
ごくごく偶に書かれることはありますが、さほど役立った経験はありません。 Railsなどにおいてはまず書かないものとしてプラクティスが出来上がっています。
Unit
単体テストに関してはwebであろうとなんであろうと同じ程度に重要です。
しかし外からは見えないはずのpublic以外のメソッドをテストするのはほぼ死刑です。 カプセル化を破壊せずにpublicメソッドを通じてブラックボックステストしてください。
まとめ
テストの優先度としては、モデルテスト > アクセスのテスト > もう少し詳細なコントローラーテスト > E2Eテスト > UIテスト、という形に落ち着くかと思います。 単体テストはいろんなところで発生するものなのでここでの順位付けはしませんでした。
テストといえばTDDについての話もありますがそれについてはここでは触れませんが、webアプリケーションの作成でTDDというのは割と上級者向けかなと個人的に思っています。 TDDについては過去におすすめのTDD本について書いているのでそちらをご覧ください。