2012-03-29 78 views
7

我有一个实现InvocationHandler的,如下一类:如何在PowerMockito中模拟java.lang.reflect.Method类?

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的窍门,但这似乎并没有削减它。 这是因为它被引导?我只是想解决这个问题吗?

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

回答

3

随着PowerMock你可以嘲笑final类,但是,虽然我不相信它的记录,也有在java.lang和包java.lang.reflect一些类,你只可以”因为它们对于嘲笑框架如何处理它来说太重要了。

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

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

+0

是的,它看起来像一个类似的问题。我最终通过模拟来创建一个Method对象,然后验证该方法是否在模拟上被调用。谢谢! – 2012-03-30 12:15:24

相关问题