テストとは何か#
ウィキペディアの定義:
規定された条件下でプログラムを操作し、プログラムのエラーを発見し、ソフトウェアの品質を測定し、設計要件を満たすかどうかを評価するプロセス。
こう理解することもできます:テストの役割はコードの品質と保守性を向上させることです。
- コードの品質向上:テストはバグを見つけ、バグを特定し、それを解決することです。バグが少なくなれば、コードの品質は自然に高くなります。
- 保守性:既存のコードを修正したり、新機能を追加したりすることで発生するコストが低ければ低いほど、保守性は高くなります。
いつテストを書くべきか#
もしあなたのプログラムが非常にシンプルであれば、テストを書く必要はありません。例えば、以下のプログラムは機能がシンプルで、十数行のコードしかありません:
function add(a, b) {
return a + b
}
function sum(data = []) {
let result = 0
data.forEach(val => {
result = add(result, val)
})
return result
}
console.log(sum([1,2,3,4,5,6,7,8,9,10])) // 55
もしあなたのプログラムが数百行のコードであっても、うまくカプセル化されており、モジュール化の理念を完璧に実践している場合、各モジュールの機能が単一でコードが少ないのであれば、テストを書く必要はありません。
もしあなたのプログラムが何千行ものコードで、数十のモジュールがあり、モジュール間の相互作用が複雑である場合、その場合はテストを書く必要があります。非常に複雑なプロジェクトを修正した後、テストがなければどうなるか想像してみてください。この修正に関連するすべての機能を手動でテストする必要があり、バグが発生するのを防ぐためです。しかし、テストを書いていれば、1 つのコマンドを実行するだけで結果を知ることができ、時間と労力を節約できます。
テストの種類とフレームワーク#
テストの種類は多くあります:単体テスト、統合テスト、ホワイトボックステスト...
テストフレームワークも多くあります:Vitest、Jest、Jasmine、LambdaTest...
単体テスト#
単体テストとは何か?ウィキペディアでの定義は次のとおりです:
単体テスト(英語:Unit Testing)は、プログラムモジュール(ソフトウェア設計の最小単位)に対して正確性を検証するテスト作業です。
フロントエンドの観点から見ると、単体テストは関数、コンポーネント、クラスに対するテストであり、対象の粒度は比較的小さいです。
単体テストはどのように書くべきでしょうか?
- 正確性に基づいてテストを書く、つまり正しい入力には正常な結果があるべきです。
- エラー性に基づいてテストを書く、つまり誤った入力には誤った結果があるべきです。