如何在PowerMockito中模拟java.lang.reflect.Method类?

Mat*_*man 9 junit unit-testing mocking mockito powermock

我有一个实现InvocationHandler的类,如下所示:

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

使用PowerMock和Mockito,我试图在我的单元测试类中传入一个模拟的方法对象:

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

  @Test
  public void testInvoke() throws Throwable
  {
    Method mockMethod = mock(Method.class);
    //...
  }
}
Run Code Online (Sandbox Code Playgroud)

由于方法是final,我已经完成了@PrepareForTest诀窍,但似乎没有削减它.这是因为它是自助的吗?我只是错了吗?

我一直在看下面的链接,但那里没有任何确定性:

jhe*_*cks 5

使用PowerMock可以模拟最终的类,但是,尽管我不相信有记载,但java.lang和java.lang.reflect包中有些类是您无法模拟的,因为它们对于如何模拟框架就是这样。

我认为这些包括(但可能不限于)java.lang.Class,java.lang.reflect.Method和java.lang.reflect.Constructor。

但是,您要做什么需要模拟方法呢?您可以很容易地创建一个真实的方法对象。您甚至可以在虚拟类上创建一个真实的方法对象,然后可以检查该对象是否曾经被调用以及带有什么参数。您只是无法使用Mockito和Powermock来做到这一点。看看您的问题是否与此问题相似。