web-dev-qa-db-ja.com

gtestとgmockの違いは何ですか?

google-mockの目的を理解しようとしています。 GoogleのC++モックフレームワーク

私はすでにgtestを使用したことがありますが、gmockが何であるかまだ理解できません。なぜ必要なのですか?

gtestは単体テストに使用されます。 unit testinggmockが必要な場合、gmockは何が必要ですか?

30

「Google Mockはテストフレームワークそのものではありません。代わりに、テストを記述するためのテストフレームワークが必要です。GoogleMockはGoogle Testとシームレスに連携します。GoogleTestのコピーがバンドルされています。任意のC++テストフレームワークを使用します。」-Google Mock、システム要件

モックはオブジェクトに似ており、制御された動作を提供することでリアルディールを模倣するように定義されています。たとえば、株式ティックアプリケーションをテストするには、コードをテストするための偽の株価を作成する偽の株式データプロバイダーを作成します。 Wordのモックを考えてください。文字通り「模倣する」という意味です。

38
dans3itz

ソフトウェアユニットは緑の牧草地に住んでいません。彼らは仕事をするためにいくつかのカウンターパートをしばしば必要とします。実際のシステムでは、これらの対応物はシステム自体に属します。単体テストでは、モックに置き換えられます。

Gtestは、単体テストのフレームワークです。 Gmockは、単体テスト中にシステムの残りの部分を模倣するフレームワークです。

29
Thinkeye

予測不可能で高価な外部システム(Webサイト、大規模なデータベース、物理センサーなど)と対話する必要があるコードを記述していると仮定します。外部システムがタイムアウトしても、コードは動作し続ける必要があります。 、またはエラーメッセージが表示されるか、一貫性のないデータが表示されます。コードが実際にこれらの要件を満たしているかどうかをテストするにはどうすればよいですか?

まあ、実際のWebサイト/データベース/センサー/何でも、何回も実行することができ、コードが処理するはずのすべてのエラー状態にうまくいくことを願っています。明らかに、かなり高価で信頼性の低いテスト戦略です。

その代わりに、Webサイト/データベース/センサー/何でも同じインターフェースを満たすものを書きますが、特定の「定型」応答(エラー、タイムアウト、一貫性のないデータなど)を生成するようにプログラムしました。より高速に(real Webサイト/データベース/センサー/何でも)のオーバーヘッドに直面しないため、予測可能です。残念ながら、テストする必要のあるシナリオごとに、個別の「モック」Webサイト/データベース/センサー/その他を作成するには多くのコーディングが必要です。作業が多いほど、実行する可能性は低くなります。結果:不適切にテストされたコード。

Gmockとその親族はこのようなことの多くを自動化するので、わずか数行のコードを実行するだけで、テスト自体の途中で目的の「定型」動作を指定できます。テストを書くのが簡単な場合は、テストをもっと書く可能性が高いため、コードを出荷する前にバグを発見する可能性が高くなります:-)

ところで、これは、「依存性注入」も必要であることを意味します。コードはインターフェイス型のパラメーターを取得する必要があり、モックオブジェクト(ユニットテスト用)または「実際の」 Webサイト/データベース/センサー/その他(実際に使用する場合)。

13
Stephen Bloch

ファイルに何かを書きたいとしましょう。

システムメモリがいっぱいかどうかをテストする必要があります。

これをテストするためにシステムメモリをいっぱいにしますか?番号。

友人のGoogleモックが役立ちます。

3