はじめに
単体テストを書き始めたばかりの頃は、
「とりあえず動くテストは書けたけど、正しい単体テストの観点が分からず、これで良いのか不安」
と感じることが多いのではないでしょうか。
単体テストには正解の書き方が一つあるわけではなく、
経験が少ないうちは「どこをチェックすれば品質が高いと言えるのか」、その単体テストの観点が
分かりにくいものです。
この記事では、初心者でも確認しやすい単体テストの観点を
チェックリスト形式でまとめました。
・テストを書いたあとに自分で確認する
・レビュー時の観点として使う
といった用途を想定しています。
完璧を目指すためのものではなく、
「今のテストを少し良くする」ための指針として活用してみてください。
初心者向け単体テストの観点チェックリスト
① 目的の観点|何をテストしているか分かるか
・何をテストしているかがテスト名から分かる
・1つのテストで確認している内容は1つだけ
・「とりあえず書いたテスト」になっていない
【ポイント】
テスト名は「〇〇の場合、△△になること」のように
日本語で読んでも意味が通じると理想的です。
② 入力の観点|正常系以外も網羅しているか
・正常な入力だけでなく、異常な入力もテストしている
・境界値(0、最大値、最小値など)を意識している
・想定外の値が来た場合の挙動を確認している
【ポイント】
初心者のうちは「正常系だけ」になりがちです。
バグは異常系に潜みやすいため、単体テストの観点として欠かせない要素です。
③ 判定の観点|テスト結果は明確か
・assert の内容が分かりやすい
・何が正しい結果なのかがコードから読み取れる
・あいまいな比較(とりあえず true を見る等)をしていない
【ポイント】
テストは「動けばOK」ではなく、
何が正解なのかを明確に示すものです。
④ 保守性の観点|単体テストが壊れやすくないか
・実装の内部構造に強く依存しすぎていない
・少しの仕様変更で大量にテストが壊れない
・private な実装を無理にテストしていない
【ポイント】
「実装を守るテスト」ではなく
「振る舞いを確認するテスト」を意識すると安定します。
⑤ 可読性の観点|テストコードは読みやすいか
・変数名・関数名が意味を持っている
・不要な処理や重複コードが多くない
・コメントがなくても大まかな意図が分かる
【ポイント】
テストコードも立派な成果物です。
「未来の自分や他人が読む」前提で書きましょう。
⑥ 実行の観点|単体テストは簡単に行えるか
・ワンコマンドでテストを実行できる
・実行結果がすぐ分かる
・テストが遅すぎて実行を避けたくならない
【ポイント】
実行が面倒なテストは、
書かれなくなる・回されなくなる原因になります。
⑦ 品質の観点|カバレッジだけを目的にしない
・カバレッジ100%が目的になっていない
・「意味のあるケース」を意識している
・数字よりも内容を説明できる
【ポイント】
カバレッジはあくまで目安です。
重要な単体テストの観点は、「このテストで何が防げるか」を説明できることです。
まとめ:自分なりの単体テストの観点を養う
単体テストの品質は、
「たくさん書いたか」「カバレッジが高いか」だけでは判断できません。
大切なのは、
・何を確認しているテストなのか分かること
・バグを見つけられる可能性があること
・継続して実行・保守できること
です。
今回紹介したチェックリストは、
すべてを最初から満たす必要はありません。
まずは気になった項目を1つでも意識するだけで、
単体テストの書き方は確実に変わっていきます。
単体テストは「慣れ」が大きい分野です。
チェックリストを使いながら、
少しずつ自分なりの良いテストの基準を作っていきましょう。
