web-dev-qa-db-ja.com

Javaのモックオブジェクトとは何ですか?

モックオブジェクトがJavaで何であるかを知りたいです。なぜそれらを作成し、それらの用途は何ですか?

41
giri

モックオブジェクトはユニットテストに使用されるものです。テストするメソッドを持つオブジェクトがあり、それらのメソッドが他のオブジェクトに依存している場合、その依存関係の実際のインスタンスではなく、依存関係のモックを作成します。これにより、オブジェクトを単独でテストできます。

一般的なJavaモックオブジェクトを作成するためのフレームワークには、 JMock および EasyMock が含まれます。通常、動作を定義できるモックオブジェクトを作成できます。モックオブジェクトのメソッドを呼び出すときに何を期待するか(戻り値と副作用に関する限り)を正確に知っています。

一例として、一般的な使用例の1つは、DAOレイヤー(データアクセスオブジェクト)とビジネスロジックを実行するコントローラーを備えたMVCアプリケーションです。コントローラーの単体テストを行いたい場合で、コントローラーがDAOに依存している場合は、ダミーオブジェクトをコントローラーに返すDAOのモックを作成できます。

注意すべき重要な点の1つは、通常、モックオブジェクトがモックしているオブジェクトと同じインターフェイスを実装する場合です。これにより、コードはインターフェイスタイプを介して、あたかも本物のインスタンスであるかのようにそれらを処理できます.

54
danben

モックとモックオブジェクトはJavaに固有のものではありません。モックオブジェクトは、コードチャンクを実際のコードをエミュレートするダミーの実装に置き換えるユニットテスト技術です。これは、テスト対象のクラスによって提供される機能を対象とした単体テストを作成するのに役立ちます。

モッキングの概念を非常によく紹介している以下の記事を確認してください。
モックオブジェクト (PDF)
エンドテスト:モックオブジェクトを使用した単体テスト (PDF)

Javaでの単体テスト用の模擬フレームワークを探している場合は、 Mockito をご覧ください。単体テストに役立つことがわかりました。

15
sateesh

モックオブジェクトを使用すると、実際のオブジェクトで実際のコードを実行せずに、実際のオブジェクトをシミュレートして検証できます。メソッド呼び出しで特定の結果を返すようにモックを設定したり、メソッドが呼び出されたかどうかを確認したり、その他のクールなものを確認したりできます。

Mockito は非常にシンプルでわかりやすいJavaモックオブジェクトライブラリです。

5
Kaleb Brasee

ここから引用: http://easymock.org/

単体テストは、ソフトウェアユニットを単独でテストすることです。ただし、ほとんどのユニットは単独では機能しませんが、他のユニットと連携します。ユニットを単独でテストするには、テストで協力者をシミュレートする必要があります。モックオブジェクトは、コラボレーターのテスト指向の代替です。置換するオブジェクトを簡単な方法でシミュレートするように構成されています。

たとえば、http呼び出しをテストする場合は、すべての依存関係を備えた実際の要求オブジェクトを作成する必要があります。これには多くの労力が必要になることが多いため、モックされたオブジェクトを使用すると、依存関係の長いチェーンなしで、必要なオブジェクトの正確なレンディションをすばやく作成できます。

4
davek

モックオブジェクトはユニットテストで使用されるものです。これにより、テストする機能のみをテストできます。すべての依存関係は、これらの依存オブジェクトをモックすることで実現できるためです。したがって、テストに合格した場合、テスト対象のユニットが正しいことを確認できます。

そのため、それらを作成するテストライターです。 EasyMockをモッキングのツールの1つとして使用できます。

1
GuruKulki