我有一个实现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
技巧,但似乎没有削减它。 这是因为它是自助的吗?我只是想犯这个错误吗?
我一直在看下面的链接,但那里没有确定的内容:
答案 0 :(得分:5)
使用PowerMock你可以模拟一个最终的类,但是,虽然我不相信它的文档,但java.lang和java.lang.reflect包中有一些你不能模拟的类,因为它们也是对于模拟框架如何做到这一点至关重要。
我认为这些包括(但可能不限于)java.lang.Class,java.lang.reflect.Method和java.lang.reflect.Constructor。
但是,你想要做什么需要一个模拟方法?您可以轻松地创建一个真正的方法对象。您甚至可以在虚拟类上创建一个真正的方法对象,然后您可以检查它是否曾被调用以及使用什么参数。你不能使用Mockito和Powermock来做到这一点。看看您的问题是否与this question类似。