3秒でわかる
期待どおりに動くかをコード自身に確かめさせる仕組み。一度書けば何度でも同じ確認が数秒で終わり、変更のたびに壊れていないかを保証できます。
もう少し詳しく
どういうものか
自動テストは、プログラムを動かして結果が期待どおりかを判定するコードのことです。人が画面を触って確かめる代わりに、テストコードが入力を与え、戻り値や表示を宣言した期待値と比べます。
実行するとテストランナーが結果を集計し、合格した数と失敗した箇所を表示します。失敗したテストは、どの入力でどんな値になったかまで教えてくれます。
なぜ必要か
手作業の確認は、回数が増えるほど破綻します。機能が 50 個あるアプリで 1 行直すたびに全部を触り直す人はいません。結果、直した箇所だけ見て、無関係に見えた場所が壊れたまま本番に出ます。
自動テストがあれば、この確認が数十秒で終わります。効果が一番大きいのはリファクタリングのときです。テストが通り続けている限り、外から見た振る舞いを変えずに中身を作り替えたと言えます。テストは仕様書としても働き、コードを読むより先にテストを読むほうが早い場面も多いです。
具体例
// sum.js
export function sum(items) {
return items.reduce((a, b) => a + b, 0);
}
// sum.test.js
import { describe, it, expect } from "vitest";
import { sum } from "./sum.js";
describe("sum", () => {
it("数値を合計する", () => {
expect(sum([100, 200, 300])).toBe(600);
});
it("空<a href="/glossary/array" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">配列</a>なら 0 を返す", () => {
expect(sum([])).toBe(0);
});
it("負の値も扱える", () => {
expect(sum([100, -30])).toBe(70);
});
});どのテストも「準備」「実行」「検証」の 3 段で書かれています。この形を崩さないと読みやすさが揃います。
つまずきやすいところ
似た用語との違い
覚え方
自動テストは「壊れたら鳴る警報」です。鳴らない警報に価値は無いので、まず落ちることを確認してから、通るように直す順で書きます。