実装の変更に振り回されないこと
「実装の内部構造を変えただけでテストが壊れる」状態は、リファクタリングを躊躇させるので、テストがあることが逆に開発の足枷になります。
学習者リファクタしただけでテストが赤くなる…。これってテストが悪いの?それともコードが悪いの?
テストの偽陽性とは
テストの偽陽性とは、テストが失敗したが、実際にはバグがないことを意味します。
偽陽性が少ないことは、リファクタリングの耐性を高めることにつながります。
偽陽性でテストの意味がなくなってしまう
開発でコードを記述していいて、問題あるコードを事前に検知できることがテストの意味ですが、偽陽性が多いと、その信頼性が失われてしまいます。
テストの偽陽性を減らす方法
最終的な結果を確認することで、偽陽性を減らすことができます。
テストが確認すべきなのは「外部から観測できるもの」で、これは大きく3つあります。
- 戻り値
- 状態の変化(DBに保存された、オブジェクトのプロパティが変わった等)
- 外部への呼び出し
区別の基準はシンプルで、「その検証対象を変えたとき、ユーザーや外部システムが気づくか」です。
気づくなら振る舞い、気づかないなら実装の詳細です。