4

私は最近 EasyMock を紹介され、それを使用して FileMonitor クラスの単体テストを開発するよう依頼されました。FileMonitor クラスは、定義されたファイルとディレクトリのリスト内のファイルの変更を起動してチェックする時限イベントに基づいています。実際のファイル システムを使用してこれを行う方法を取得し、ファイルに書き込むテストを作成し、FileMonitor にその処理を任せます。では、EasyMock を使用してこれを行うにはどうすればよいでしょうか。EasyMock でファイル システムをモックする方法がわかりません。

ありがとう、トッド

4

4 に答える 4

6

次のようなもの:

import static org.easymock.classextension.EasyMock.*;

File testDir = createMock(File.class);
expect(testDir.lastModified()).andReturn(10L);
// more expectations
replay(testDir);
// create a FileMonitor watching testDir
// run the method which gets invoked by the trigger     
verify(testDir);
于 2010-04-22T04:32:15.133 に答える
2

優れた(そして簡潔な)ユーザーガイドをご覧ください。ただし、EasyMockの使用を再検討することもできます。ほとんどの人は、現在、より高度でより積極的に開発されたMockito(EasyMockに触発された)を使用しているか、切り替える過程にあります。

于 2010-04-22T05:53:49.570 に答える
0

ファイルシステムへの実際の呼び出しは、別のpackage-privateメソッドに入れます。テストのために、クラスを拡張し、そのメソッドをオーバーライドします。したがって、実際にはファイルシステムを呼び出すことはありません。

EasyMocks classextensionには、パリティモックを作成する可能性もありますが、私はそれを完全には確信していません。

http://easymock.org/EasyMock2_4_ClassExtension_Documentation.html

于 2010-04-22T06:51:08.037 に答える
0

モックの基本的な手法は、モックされている実際のサービス (依存関係) のメソッドを提供するインターフェイス (現在の設計にインターフェイスがない場合) を導入することです。テストは、テスト対象のクラスが依存関係と正しく対話することをテストしています。ここで正しくは、期待どおりの動作をすることを意味します。それが正しいことを意味するわけではありません。正しいことは、実際のコンポーネント (実際のファイルを作成することによって想定されること) を使用する統合テストによってのみ決定できるためです。

したがって、テスト対象のクラスに、このインターフェースの実装を渡すことができるメソッドが必要です。最も明白なのは、コンストラクターを使用することです。実際のファイルシステムにヒットするインターフェースの実際の実装でクラスを初期化するプロダクションコンストラクターがあり、テストの下でモックをコンストラクターに渡します。

テストでは、クラスでメソッドを実行し、インターフェイスが期待どおりに呼び出されたことをアサートします。

クラスが作成され、モックを介した単体テストが行​​われた後に来ることは価値が限られていることに注意してください。ただし、クラスへの将来の変更が驚くべき方法で期待を裏切らないように、動作を固定するのに役立ちます。

始めるのに役立つことを願っています。

一部のモッキング フレームワークは、実際の具象クラスのモッキングをサポートしています。これは、単体テスト後のテストで非常に有効です (インターフェイスだけでなく、実際のクラスへの呼び出しをインターセプトすることにより)。EasyMock でそれができるかどうかはわかりませんでしたが、そのような機能が必要な場合は、おそらくJDaveが最適です。最終クラスをモックすることさえできます。

于 2010-04-22T02:15:31.030 に答える