一人前エンジニア道場

テストと品質 / 約20分

単体テストの考え方: 何を・どうテストするか

なぜこれを学ぶか

「テストを書いてから実装する」というTDDを聞いたことがあるでしょうか。テストは「動くか確認するもの」ではなく、「仕様を実行可能な形で書いたもの」です。この視点の転換がエンジニアとしての大きな成長点です。

単体テスト(ユニットテスト) は、関数・クラスなどの小さな単位が「仕様通りに動くか」を自動で検証します。手動テストは1回限りですが、単体テストは何度でも繰り返せます。

テストするべき3パターン: ①正常系(想定どおりの入力)②異常系(不正な入力・エラー)③境界値(0、空文字、上限ぴったり等)。この3つを意識するだけでテスト品質が大幅に上がります。

テストしやすいコードの特徴: 副作用がない(同じ入力→同じ出力)、依存が注入できる(グローバル変数を使わない)、1関数が1つのことだけする。逆に「テストが書きにくい」は設計の悪さのサインです。

テストを書くことのメリット: ①リファクタリングへの安心感(壊れたらすぐ気づく)②仕様の文書化(テストを読めば動作がわかる)③AIが書いたコードの検証ツール。

Arrange-Act-Assert(AAA)パターン: テストは「準備(Arrange)→実行(Act)→検証(Assert)」の3フェーズで書くと読みやすくなります。この道場のコーディング演習のテストも同じ構造になっています。

重要ポイント

  • テストは「仕様の実行可能な文書」
  • 正常系・異常系・境界値の3パターンを意識する
  • テストしにくいコードは設計が悪いサイン

理解度チェック

選ぶと即座に解説が表示されます。

「テストしにくいコード」の代表的な特徴はどれか?

ヒントを見る

テストは「同じ入力を与えると同じ結果が返るか」を確認します。何があると「同じ入力・同じ結果」が保証できなくなりますか?

コーディング演習実際に書く

TDDの精神で、テストケースを満たす関数を実装してください。`calculateDiscount(price, memberType)` は価格と会員タイプから割引後の価格を返します。仕様: ①"premium"会員は20%割引②"regular"会員は10%割引③その他は割引なし④価格が0以下なら0を返す⑤小数点以下はfloor。例: calculateDiscount(1000, "premium") → 800

function calculateDiscount(price, memberType)

スキルセルフチェック

このレッスンの内容をどの程度理解できましたか?