2012-03-29 15 views
7

tengo una clase que implementa InvocationHandler de la siguiente manera:¿Cómo me burlo de la clase java.lang.reflect.Method en PowerMockito?

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

Usando PowerMock & Mockito, estoy tratando de pasar en un método objeto burlado en mi clase de prueba de unidad:

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

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

Desde Método es final, he hecho el truco @PrepareForTest pero eso no parece cortarlo. ¿Esto es porque está arrancado? ¿Acaso estoy haciendo esto mal?

He estado buscando en los enlaces de abajo pero no hay nada definitivo ahí:

Respuesta

3

Con PowerMock puede burlas de una clase final, sin embargo, aunque no creo que está documentado, hay algunas clases del paquete java.lang y java.lang.reflect que sólo puede' se burlen porque son demasiado fundamentales para saber cómo funciona el marco burlón.

Creo que estos incluyen (pero probablemente no se limitan a) java.lang.Class, java.lang.reflect.Method y java.lang.reflect.Constructor.

Sin embargo, ¿qué estás tratando de hacer que requiere un método simulado? Podría crear un objeto de método real con la suficiente facilidad. Incluso podría crear un objeto de método real en una clase ficticia que luego podría verificar para ver si alguna vez se invocó y con qué argumentos. Simplemente no puedes usar Mockito y Powermock para hacerlo. Vea si su problema es similar al this question.

+0

Sí, parece un problema similar. Terminé recorriendo la ruta de crear un objeto Método normalmente a partir de un simulacro, y luego verificando que el método se invocó en el simulacro. ¡Gracias! –

Cuestiones relacionadas