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

时间:2012-03-29 15:20:39

标签: unit-testing junit mocking mockito powermock

我有一个实现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);
    //...
  }
}

由于方法是final,我已经完成了@PrepareForTest技巧,但似乎没有削减它。 这是因为它是自助的吗?我只是想犯这个错误吗?

我一直在看下面的链接,但那里没有确定的内容:

1 个答案:

答案 0 :(得分:5)

使用PowerMock你可以模拟一个最终的类,但是,虽然我不相信它的文档,但java.lang和java.lang.reflect包中有一些你不能模拟的类,因为它们也是对于模拟框架如何做到这一点至关重要。

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

但是,你想要做什么需要一个模拟方法?您可以轻松地创建一个真正的方法对象。您甚至可以在虚拟类上创建一个真正的方法对象,然后您可以检查它是否曾被调用以及使用什么参数。你不能使用Mockito和Powermock来做到这一点。看看您的问题是否与this question类似。