EasyMockFoo.doSomething(String arg):String
を使用してメソッドをテストしたいとします。EasyMock Captureを使用して、パラメーター内に設定された値をキャプチャし、後で取得できることを知っています。テストを作成するときの目標は、Fooのメソッドをモックアウトしたときに値をキャプチャし、モックしたメソッドの外部でキャプチャの値を取得することです。私はこのようなことを試みています:
Capture<String> stringCapture = new Capture<String>();
EasyMock.expect(foo.doSomething(EasyMock.capture(stringCapture)).andAnswer(new IAnswer<String> {
@Override
public String answer() throws Throwable {
...
});
String retrievedValue = stringCapture.getValue();
ただし、使用しようとするとランタイムエラーが発生しますgetValue()
:
java.lang.AssertionError: Nothing captured yet
at org.easymock.Capture.getValue(Capture.java:80)
at com.example.Test.myTest(...)
....
String
テストメソッド内であるがIAsnwer
クロージャーの外側に変数を持ち、その変数の値をメソッド内に設定できればいいのにと思いIAnswer.answer()
ます。問題は、クロージャーにアクセスできるようにするためにString
変数をとしてマークする必要があることです。これにより、変数は変更できなくなり、使用できなくなります。final
また、これを解決するためだけにグローバルを使用したくありません。
私が考えた唯一の回避策は、Stringフィールドを持つ独自のクラスを使用し、それをのfinal
外部の変数として宣言しIAnswer
、キャプチャされた値を中answer()
に設定し、最後にこの値をテストメソッド内のフィールドに設定することです。別のクラスを使用してキャプチャされた値、またはグローバル変数を抽出することは私には醜いように思われるため、おそらくこれを行うためのより良い方法があります。