テストダブルは、ソフトウェアテスト自動化で使用されるソフトウェアであり、依存関係を満たすため、テストが実稼働コードに依存する必要がありません。テスト ダブルは、テスト対象のソフトウェアが実稼働コードと区別できない インターフェイスを介して機能を提供します。
プログラマーは通常、テスト ダブルを使用して、消費コードの動作をコードベースの残りの部分から分離します。
テスト ダブルは通常、製品コードの簡略化されたバージョンであり、テストに固有の機能が含まれる場合があります。
テスト ダブルはテスト ハーネスを構築するために使用されます。
用途
テストダブルを使用すると、テストの実行を簡素化し、高速化できます。
たとえば、データベース サーバーを使用するプログラムは比較的遅く、大量のシステム リソースを消費するため、テストの生産性が低下します。また、テスト ケースでは、データベースに保存されている値以外の値が必要になる場合があります。テスト ダブルは、データベースにアクセスするのではなく、静的な値を提供する場合があります。
テスト ダブルは、依存関係がまだテストの準備ができていない場合でも、テストの準備ができているシステムの一部をテストするために使用できます。
たとえば、Login、Home、User のモジュールがあるシステムで、Login はテストの準備ができているが、他の 2 つはまだ準備ができていないとします。Home と User の消費関数は、Login をテストできるようにテスト ダブルとして実装できます。
種類
テストダブルはさまざまな方法で分類されます。
一般的な
普遍的に受け入れられているわけではないが、Gerard Meszaros [1]はテストダブルを次のように分類している。
- スタブ- 静的入力を提供する
- Mock — テスト実行前に定義された期待値に基づいて出力を検証します(Mock オブジェクトとは異なります)
- Spy — テスト実行前に呼び出しの出力を設定し、テスト実行後に入力パラメータを検証することをサポートします。
- 偽物 - 実稼働バージョンよりもテストに適した、比較的フル機能の実装。例:データベースサーバーの代わりにインメモリデータベース。
- ダミー値 - テスト対象のインターフェースに必要な値だが、テストケースが依存しない値
カテゴリにはオープンスタンダードはありませんが、 Martin FowlerはMeszarosの本を参考にして、Mocks Aren't Stubs [2]という記事でこれらの用語を使用しました。Microsoftも、 Exploring The Continuum Of Test Doublesという記事で同じ用語と定義を使用しました。[3]
サービス
サービス指向アーキテクチャ(SOA)システムやマイクロサービスの場合、テスト担当者はネットワークプロトコルを介してテスト対象システムと通信するテストダブルを使用します。 [4] [5]これらのテストダブルは、ツールベンダーによってさまざまな名前で呼ばれています。一般的に使用される用語はサービス仮想化です。他の名前には、APIシミュレーション、APIモック、[6] HTTPスタブ、HTTPモック、オーバーザワイヤテストダブル[7]などがあります 。[8]
偽物と確認
検証済みの偽物とは、検証済みの偽物と実際の実装の両方に対して実行される一連のテストを使用して、その動作が実際のオブジェクトと一致することが検証された偽物のオブジェクトです。 [9]
参照
参考文献
- ^ Meszaros, Gerard (2007). xUnit テストパターン: テストコードのリファクタリング. Addison-Wesley. ISBN 978-0-13-149505-0。
- ^ Fowler, Martin (2007). 「Mocks Aren't Stubs」。2010 年 12 月 29 日閲覧。
- ^ Seemann, Mark (2007). 「テストダブルの連続性の探究」2010 年 12 月 29 日閲覧。
- ^ Clemson, Toby「マイクロサービス アーキテクチャにおけるテスト戦略」、martinfowler.com、2014 年 11 月 18 日。2017 年 12 月 7 日に取得。
- ^ Byars, Brandon. 「Testing Microservices with Mountebank」、Manning Publications、MEAP は 2017 年 3 月に開始されました。ISBN 9781617294778。2017年12 月 7 日に閲覧。
- ^ Bryant, Daniel「API モッキング ツール WireMock v2 がリクエスト マッチングとスタブ管理の強化によりリリース」、InfoQ、2016 年 8 月 16 日。2017 年 12 月 7 日に取得。
- ^ ThoughtWorks「テクノロジーレーダー、ツール:Moontebank」、ThoughtWorks、2015年11月。2017年12月7日閲覧。
- ^ Bulaty, Wojciech「テストチームと開発チームにおけるスタブ、モッキング、サービス仮想化の違い」、InfoQ、2016 年 2 月 19 日。2017 年 12 月 7 日に取得。
- ^ Turner-Trauring、Itamar (2019)。「低速なサービスのための高速テスト:検証済みの偽物を使用すべき理由」 。 2019年1月21日閲覧。
外部リンク
ジェラルド・メサロス:
- テストダブル
- テストダブルパターン
- モック、フェイク、スタブ、ダミー
マーティン・ファウラー:
- TestDouble、2006年1月17日
オープンソース:
- ELF Spy - C++ の偽物とスパイ
- FakeIt - C++ のモック、フェイク、スパイ
- Google Mock - C++ でのモック
- jMock - モックを使ったテスト駆動開発
- Mockito - Java 用モッキング フレームワーク
- unittest.mock - Python によるモック
