2010-09-17 19 views
9

Encontré esto example donde usaron PowerMock y EasyMock para resguardar las clases Menu y MenuItem para android. He estado tratando de hacer algo similar con PowerMock y Mockito con la clase Activity.Intento de stub android Clase de actividad utilizando PowerMockito arroja RuntimeException "Stub!"

Entiendo que muchos de los métodos son definitivos y que en Android.jar todos arrojan RuntimeException ("Stub!").

También entiendo que esta prueba no está completa pero solo quiero ver si es posible burlarse de la clase de actividad de Android.

Pero dado que PowerMock le permite simular clases con los métodos finales, ¿no debería funcionar este código?

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Activity.class) 
public class MyTestCase extends TestCase { 

    public void testPlease_JustWork() throws Exception { 
     Activity mockActivity = PowerMockito.mock(Activity.class); 

     PowerMockito.when(mockActivity.getTitle()).thenReturn("Title"); 
    } 
} 

Me gustaría pensar que la RuntimeException ya no ocurrirá y "Título" sería devuelto pero todavía produce la excepción.

que han intentado todo tipo de cosas diferentes como doReturn("Title").when(mockActivity).getTitle(); y suppress(constructor(Activity.class));

estoy haciendo algo mal o es esto simplemente no es posible?

Respuesta

0

Acabo de probar tu código de muestra y funciona aquí, extraño. Descargué PowerMock 1.4.5 con Mockito y JUnit incluyendo dependencias y usé android.jar desde el sdk (2.2). Solo falla con la excepción si elimino el @PrepareForTest.

EDITAR

Se podría utilizar el android.jar con el código de excepción eliminado, previsto en el artículo que se hace referencia.

+0

Lo intentaré ... – bytebender

+0

Sin dados, ¿me puede mostrar cómo son sus líneas de importación? – bytebender

+0

he subido todo el proyecto de eclipse a http://maik.0x2a.at/PowerMockTests.zip. Puede que necesites adaptar la ruta al android.jar – crazymaik

5

Probablemente no sea una respuesta directa a su pregunta, pero puede probar Robolectric para probar partes de su aplicación Android en su PC.

Roboelectric evita el trozo! excepción y le da una cierta aplicación mínimos clases Android

2

Creo que la respuesta es que el orden de los asuntos bibliotecas de referencia debido a que la android.jar incluye unos tetones de JUnit.

Debe asegurarse de que en su proyecto de prueba, si va a 'propiedades' y luego 'Java Build Path', el junit jar asociado con la versión completa de powermock que descargó aparece en 'Order and Export' pestaña anterior android.jar. Si no lo hace, el sistema resuelve los paquetes junit.framework y junit.runner de android.jar antes de que los resuelva del junit.jar incluido en powermock.

Me doy cuenta de que esta pregunta es antigua, pero creo que esta es la respuesta correcta, así que quería asegurarme de documentarla en la pregunta.

Cuestiones relacionadas