我有一个实现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来做。看看你的问题是否与这个问题相似。