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



我有一个实现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的技巧,但这似乎并不能解决问题。这是因为它是自举的吗?我是不是搞错了

我一直在看下面的链接,但没有什么明确的:

  • https://code.google.com/p/powermock/wiki/MockitoUsage13
  • https://code.google.com/p/powermock/wiki/MockSystem
    • 这一个似乎更倾向于静态方法,而不是创建最终类的mock

使用PowerMock,您可以模拟最后一个类,然而,尽管我不相信它有文档记录,但java.lang和java.lang.reflect包中有一些类是您无法模拟的,因为它们对模拟框架的工作方式太基础了。

我认为这些包括(但可能不限于)java.lang.Class、java.lang.reflect.Method和java.lang.refrect.Constructure.

然而,您想做什么需要mock方法呢?您可以很容易地创建一个真正的方法对象。你甚至可以在一个伪类上创建一个真正的方法对象,然后你可以检查它是否被调用过,以及使用了什么参数。你只是不能用Mockito和Powermock来做。看看你的问题是否与这个问题相似。

相关内容

  • 没有找到相关文章

最新更新