【てすとはーねす】

テストハーネス とは?

💡 テスト対象を固定して電流を流す、ソフトウェア版の検査台
📌 このページのポイント
テストハーネスの3つの役割 ① セットアップ テストDBを準備 モック/スタブを注入 テストデータを投入 ② テスト実行 対象コードを呼び出し 結果を期待値と比較 ✅ Pass / ❌ Fail 判定 ③ ティアダウン テストデータを削除 DB接続をクローズ 環境を元の状態に復元 ↑ テストハーネスがこの一連の流れを自動管理 代表的なテストハーネス JUnit pytest Jest RSpec Java / Python / JavaScript / Ruby
テストハーネスのフローと代表ツール
ひよこ ひよこ

テストハーネスって何なの?テストフレームワークとは違うの?

ペンギン先生 ペンギン先生

テストハーネスは「テストを実行するための土台」全体を指す言葉だよ。テストの準備をして、テスト対象のコードを呼び出して、結果が正しいか判定して、後片付けまでやってくれる。JUnitpytestなどのテストフレームワークは、テストハーネスを実現するためのツールと言えるね

ひよこ ひよこ

「ハーネス」って馬具のことだよね?なんでテストにその名前が付いているの?

ペンギン先生 ペンギン先生

いい疑問だね。馬具のハーネスは馬を制御するための道具だよね。テストハーネスも同じで、テスト対象のプログラムを「制御された環境に固定して」動かすための仕組みなんだ。電気製品のテストで配線を固定する「ワイヤーハーネス」のイメージも近いよ

ひよこ ひよこ

具体的にはどんなことをしてくれるの?

ペンギン先生 ペンギン先生

大きく3つの役割があるよ。1つ目はセットアップ(テスト用のデータベースを用意するなど前準備)。2つ目はテスト実行(対象のメソッドを呼び出して結果を検証)。3つ目はティアダウン(テストデータの削除など後片付け)。これを毎回手動でやるのは大変だから、ハーネスが自動化してくれるんだ

ひよこ ひよこ

モックスタブとはどう関係するの?

ペンギン先生 ペンギン先生

テストハーネスの中で、外部のAPIデータベースの代わりにモックスタブを差し込むことが多いんだ。たとえば決済APIを毎回本物に接続するわけにはいかないから、『常に成功を返す偽物の決済API』をハーネスにセットして使うんだよ

ひよこ ひよこ

テストハーネスがないとどうなるの?

ペンギン先生 ペンギン先生

テストのたびに手動で環境を作って、手動で実行して、目視で結果を確認することになる。10個のテストならまだしも、数千件のテストを毎日回すCI/CD環境では不可能だよね。テストハーネスがあるからこそ、コミットするたびに何千ものテストを自動で回せるんだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「テストハーネス」って出てきたら「テストを自動で実行・管理してくれる検査台」と思えればだいたいOK!
📖 おまけ:英語の意味
「Test Harness」 = テスト用の装具・制御装置
💬 Harness(馬具・ハーネス)は元々「制御するための装置」という意味。テスト対象を固定して制御しながら検査する道具だからこの名前が付いたんだよ
← 用語集にもどる