9

以下のように InvocationHandler を実装するクラスがあります。

public class MyProxyClass implements InvocationHandler
{
  public Object invoke (Object proxy, Method method, Object[] args) throws Throwable
  {
    //Do something interesting here
  }
}

PowerMock と Mockito を使用して、単体テスト クラスでモック化されたメソッド オブジェクトを渡そうとしています。

@RunWith(PowerMockRunner.class)
@PrepareForTest({Method.class})
public class MyProxyTest
{
  MyProxy underTest;

  @Test
  public void testInvoke() throws Throwable
  {
    Method mockMethod = mock(Method.class);
    //...
  }
}

Method がfinalであるため、@PrepareForTestトリックを実行しましたが、うまくいかないようです。これは、ブートストラップされているためですか?私はこれについて間違っていますか?

以下のリンクを見てきましたが、決定的なものはありません。

4

1 に答える 1

5

PowerMock を使用すると最終クラスをモックできますが、ドキュメントに記載されているとは思えませんが、Java.lang および java.lang.reflect パッケージには、基本的すぎてモックできないクラスがいくつかあります。モッキングフレームワークがそれを行います。

これらには、java.lang.Class、java.lang.reflect.Method、および java.lang.reflect.Constructor が含まれると思います (ただし、おそらくこれらに限定されません)。

しかし、モックメソッドを必要とする何をしようとしていますか? 実際のメソッド オブジェクトは簡単に作成できます。ダミー クラスに実際のメソッド オブジェクトを作成して、それが呼び出されたかどうか、およびどの引数で呼び出されたかを確認することもできます。Mockito と Powermock を使用してそれを行うことはできません。問題がこの質問に似ているかどうかを確認してください。

于 2012-03-29T17:43:27.487 に答える