web-dev-qa-db-ja.com

EasyMock:EasyMock.anyObject()の実際のパラメーター値を取得しますか?

私の単体テストでは、EasyMockを使用してモックオブジェクトを作成しています。私のテストコードには次のようなものがあります

_EasyMock.expect(mockObject.someMethod(anyObject())).andReturn(1.5);
_

したがって、EasyMockはsomeMethod()へのすべての呼び出しを受け入れるようになりました。 mockObject.someMethod()に渡される実際の値を取得する方法はありますか、またはすべての可能な場合にEasyMock.expect()ステートメントを記述する必要がありますか?

13
Armen

Captureクラスを使用して、パラメーター値を予期およびキャプチャできます。

_Capture capturedArgument = new Capture();
EasyMock.expect(mockObject.someMethod(EasyMock.capture(capturedArgument)).andReturn(1.5);

Assert.assertEquals(expectedValue, capturedArgument.getValue());
_

Captureはジェネリック型であり、引数クラスを使用してパラメーター化できることに注意してください。

_Capture<Integer> integerArgument = new Capture<Integer>();
_

更新:

expect定義の引数ごとに異なる値を返したい場合は、andAnswerメソッドを使用できます。

_EasyMock.expect(mockObject.someMethod(EasyMock.capture(integerArgument)).andAnswer(
    new IAnswer<Integer>() {
        @Override
        public Integer answer() {
            return integerArgument.getValue(); // captured value if available at this point
        }
    }
);
_

コメントで指摘されているように、別のオプションは、answer内でgetCurrentArguments()呼び出しを使用することです。

_EasyMock.expect(mockObject.someMethod(anyObject()).andAnswer(
    new IAnswer<Integer>() {
        @Override
        public Integer answer() {
            return (Integer) EasyMock.getCurrentArguments()[0];
        }
    }
);
_
26
hoaz