2012-03-29 9 views
7

Ho una classe che implementa InvocationHandler come di seguito:Come faccio a prendere in giro la classe java.lang.reflect.Method in PowerMockito?

public class MyProxyClass implements InvocationHandler 
{ 
    public Object invoke (Object proxy, Method method, Object[] args) throws Throwable 
    { 
    //Do something interesting here 
    } 
} 

Utilizzando PowerMock & Mockito, sto cercando di passare un oggetto metodo deriso nella mia classe unit test:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({Method.class}) 
public class MyProxyTest 
{ 
    MyProxy underTest; 

    @Test 
    public void testInvoke() throws Throwable 
    { 
    Method mockMethod = mock(Method.class); 
    //... 
    } 
} 

Dal Metodo è final, ho fatto il trucco @PrepareForTest ma non sembra che lo tagli. È perché è bootstrap? Sto solo facendo questo sbagliato?

Sono stato a guardare i link qui sotto ma non c'è nulla di definitivo c'è:

risposta

3

Con PowerMock si può deridere una classe finale, tuttavia, anche se non credo che è documentato, ci sono alcune classi nel pacchetto java.lang e java.lang.reflect che appena puo' t mock perché sono troppo fondamentali per il modo in cui il framework beffardo fa la cosa.

Penso che questi includono (ma probabilmente non sono limitati a) java.lang.Class, java.lang.reflect.Method e java.lang.reflect.Constructor.

Tuttavia, cosa stai cercando di fare che richiede un metodo di simulazione? Potresti creare un oggetto metodo reale abbastanza facilmente. Potresti anche creare un vero oggetto metodo su una classe fittizia che puoi controllare per vedere se è mai stato invocato e con quali argomenti. Non puoi usare Mockito e Powermock per farlo. Verifica se il tuo problema è simile a this question.

+0

Sì, sembra un problema simile. Ho finito per passare alla creazione di un oggetto Method normalmente da una simulazione, verificando poi che il metodo fosse invocato sulla simulazione. Grazie! –

Problemi correlati