テストハーネス(test harness)とは、ソフトウェアテストにおいて、アプリケーションやコンポーネントのテストを支援するために構成されたテストスタブとテストドライバの集合体である。これは、完全なインフラストラクチャが利用できない、または望ましくないテスト環境やコンテナ化のための模倣インフラストラクチャとして機能する。
テストハーネスは、テスト自動化を可能にする。提供されたパラメータを用いて関数を呼び出し、その結果を出力して目的の値と比較することができる。テストハーネスは開発されたコードに対するフッキング(フック)を提供し、これはテスト自動化フレームワークを用いてテストすることができる。
テストハーネスは、アプリケーションの運用インフラストラクチャの全部または一部が利用できない場合のテストを容易にするために使用される。これは、ライセンス費用、テスト環境がエアギャップ化されていることを意味するセキュリティ上の懸念、リソースの制限、あるいは完全なアプリケーションから計算されたデータの代わりに事前に定義されたテストデータや小さなソフトウェアコンポーネントを提供することによるテスト実行速度の向上が理由として挙げられる。
これらの個別の目的は、単体テストフレームワークのツール、スタブ、またはドライバによって満たされる場合がある。
例 メインフレームコンピュータ上のアプリケーションとインターフェースを取る必要があるアプリケーションを構築しようとしているが、開発中にメインフレームが利用できない場合、その代わりとして使用するためのテストハーネスが構築されることがある。これにより、メインフレームによって実行される計算が不要になるよう事前に定義されたデータと応答を提供することで、通常は複雑な操作を少ないリソースで処理できるようになる。
テストハーネスは、プロジェクトの成果物の一部となることがある。アプリケーションのソースコードとは別に保管され、複数のプロジェクトで再利用されることもある。テストハーネスはアプリケーションの機能をシミュレートするが、テストスイート、テストケース、またはテストレポートに関する知識は持たない。これらの要素は、テストフレームワークおよび関連する自動テストツールによって提供される。
その役割の一部は、適切なテストフィクスチャを設定することである。
テストハーネスは一般的に、Javaなどの開発環境に固有のものとなる。しかし、より複雑なシステムで使用するための相互運用性テストハーネスも開発されている。
脚注
参考文献 Pekka Abrahamsson, Michele Marchesi, Frank Maurer, Agile Processes in Software Engineering and Extreme Programming, Springer, 1 January 2009