テストハーネスとは何か?
テストハーネスとは、テスト対象のコードに対してテストを実行可能にする支援的な足場、つまりセットアップ、ドライバ、スタブ、設定のことです。
テストが真空の中で実行されることはめったにありません。テストハーネスは、テストを可能にするためにテスト対象のコードを取り囲むすべてです。テストを実行するフレームワーク、入力を供給するフィクスチャやテストダブル、それらを結びつける設定、そして結果を記録するレポートです。それは、対象を調べられるように所定の位置に固定しておく装置です。
ハーネスに含まれるもの
- テスト実行フレームワークまたはランナー。
- 状態を構築し掃除するためのセットアップとティアダウン。
- 入力を供給するテストダブル、スタブ、フィクスチャ。
- 結果を記録する設定とレポート。
ハーネスとランナーの違い
テストランナーはハーネスの一部であり、テストを実行して結果を報告する部分です。ハーネスはより広い集合体です。ランナーに加えて、テスト対象のコードを動かせる状態に置くためのフィクスチャ、ドライバ、ダブル、設定です。ランナーは実行し、ハーネスは取り囲みます。
簡単な例
ハーネスは実際のチェックを取り囲む足場です。テストサーバーを立ち上げ、クライアントをそこに向け、その後に片付けます。
beforeAll(() => server.start());
afterAll(() => server.stop());
// the actual tests run against this harness優れたハーネスが重要な理由
よく作られたハーネスは、テストを書きやすく、実行を速く、信頼できるものにします。状態が漏れたり、セットアップが遅かったり、設定が絡み合ったりした粗末なハーネスは、すべてのテストをより難しく不安定にします。ハーネスへの投資はスイート全体で報われます。すべてのテストがそれに依存するからです。
CIにおけるハーネス
CIではハーネスは毎回、新しいrunner上でクリーンに立ち上がらなければなりません。サービスを起動し、フィクスチャを構築し、環境を設定し、そしてそれをすべて片付けるのです。jobごとのクリーンで分離されたrunnerはそのセットアップを再現可能に保ち、高速なrunnerはハーネスのセットアップが実行時間を支配するのを防ぎます。その分離と速度こそがLatchkeyのrunnerが提供するものです。
重要なポイント
- テストハーネスは、テストを実行可能にする足場である。
- ランナーに加えて、フィクスチャ、ダブル、設定を含む。
- 分離されたrunner上のクリーンなハーネスは、CIテストを再現可能に保つ。