39


7

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

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

5 Answer


52


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

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

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

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


15


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

モッキングの概念への非常に良い紹介を提供するこれらの記事をチェックしてください。 .pdf [エンドテスト:モックオブジェクトを使用した単体テスト](PDF)

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


5


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

http://mockito.org [Mockito]は、非常にシンプルでわかりやすいJavaモックオブジェクトライブラリです。


4


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

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

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


1


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

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