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 is 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 回答