0

インターフェイスのないオブジェクトがあります (これを変更することはできません)。

Mock mockedClass = mock(ObjectExample.class, "returnObject",
            new Class[ ]{java.lang.Integer, java.lang.Integer},
            new Object[ ]{1,9001});

このオブジェクトは正常にモック化され、デバッグ時にパラメーターが正常に設定されていることがわかります。私の質問は、このモック化されたオブジェクトをどのように使用できるかです。たとえば、returnOnject後でコードで使用するオブジェクトを返す方法や、このオブジェクトへの呼び出しをモックアウトする方法はありますか?

編集: CGLIBでJMockを使用しています

4

1 に答える 1

0

私があなたなら、単体テスト以外で jMock を使用せず、cglib や javassist などのプロキシ フレームワークを直接使用します。このモックObjectExample化されたクラスのサブクラスを基本的に表すプロキシを作成できます。次に、このサブクラス オブジェクトを のタイプで使用できます。ObjectExample

cglib を使用してプロキシを作成する方法の例を次に示します。

@Test
public void testMethodInterceptor() throws Exception {
  Enhancer enhancer = new Enhancer();
  enhancer.setSuperclass(ObjectExample.class);
  enhancer.setCallback(new MethodInterceptor() {
    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy)
        throws Throwable {
      if(method.getName().equals("returnObject")) {
        // Add your proxy logic here.
      } else {
        proxy.invokeSuper(obj, args);
      }
    }
  });
  ObjectExample proxy = (ObjectExample) enhancer.create();
}
于 2013-12-02T08:39:20.127 に答える