2012-03-29 65 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

相關問題