1

私はユニットテストとモックを学んでいます。JUnitを実行していて、モックフレームワークを使用する代わりに、既存のクラスとインターフェイスを拡張してモッククラスを手動で作成しました。ここで私の仕事で利用できるのはそれだけなので、モックフレームワークEasyMockを学びたいと思います。他のモックフレームワークを提案するかもしれませんが、それらは私には利用できません。

セットアップ:

ビューとプレゼンターとAPIバックエンドがあります。ユーザーが「アップデートの確認」ボタンをクリックすると、ビューはを呼び出します。このボタンpresenter.checkForUpdates()は呼び出しをapi.checkForUpdates()行い、コールバックを期待します。例外が発生した場合、APIはコールバックを介してプレゼンターに通知し、コントローラーはviewメソッドを呼び出しますview.showUserError()。API bac kendをヒットする非同期の性質のため、コールバックはパラメーターを返さずに使用されます。

テスト対象のオブジェクトはPresenterです。View.showUserError()具体的には、APIで例外が発生したときにgetsが呼び出されることをテストしたいと思います。実際のネットワーク呼び出しを行う代わりに、モックApi.checkForUpdates()してすぐに例外コールバックを呼び出すことができると思います。

問題は、EasyMockのモックの戻り値しか表示されないことです。例えば:

EasyMock.expect(api.checkForUpdates()).andReturn(xxxx)

api.checkForUpdates()何も返さず、代わりにコールバックを行うため、私には機能しません。私が本当にやりたいことは次のようなものです。

EasyMock.expect(api.checkForUpdates()).andExecute(exceptionCallback(NetworkError));

しかし、その方法がわかりません。私がやりたいことができるものはありますか、それとも基本的なものが欠けていますか?

ありがとう

4

2 に答える 2

2

'Expect()。andDelegateTo()'APIを使用してスタブを作成できると思います。

http://devlearnings.wordpress.com/2010/07/10/easymock-assert-arguments-of-method-call/

于 2012-08-03T08:41:10.030 に答える
1

EasyMockは良い選択です:-)詳細については、ドキュメントを参照してください。

必要に応じて、do andThrow(exceptionCallback(NetworkError)を呼び出すことができます。

より強力なものが必要な場合は、Answerを使用すると、答えを作成するために必要なことをすべて実行できます。andDelegateToも良い選択かもしれませんが、モックと同じインターフェースを実装するクラスを実装する必要があります。これはおそらく、あなたの場合の他の2つのオプションよりも複雑になります。

于 2012-08-03T22:26:38.840 に答える