2010-09-17 6 views
9

Ho trovato questo example dove hanno usato PowerMock e EasyMock per stub/mock le classi Menu e MenuItem per Android. Ho provato a fare qualcosa di simile con PowerMock e Mockito con la classe Activity.Tentativo di interrompere la classe di attività Android mediante PowerMockito genera RuntimeException "Stub!"

Comprendo che molti metodi sono definitivi e che in Android.jar vengono tutti visualizzati solo RuntimeException ("Stub!").

Capisco anche che questo test non è completo ma voglio solo vedere se è possibile prendere in giro la classe di attività Android.

Ma dato che PowerMock ti permette di prendere lezioni con i metodi finali, questo codice non dovrebbe funzionare?

@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"); 
    } 
} 

Vorrei pensare che il RuntimeException non sarebbe più accadere e "Titolo" sarebbe tornato, ma getta ancora l'eccezione.

ho provato tutti i tipi di cose diverse come doReturn("Title").when(mockActivity).getTitle(); e suppress(constructor(Activity.class));

sto facendo qualcosa di sbagliato o è solo non è possibile?

risposta

0

Ho appena provato il codice di esempio e funziona qui, strano. Ho scaricato PowerMock 1.4.5 con Mockito e JUnit incluse le dipendenze e ho utilizzato android.jar da sdk (2.2). Fallisce solo con l'eccezione se rimuovo @PrepareForTest.

EDIT

È possibile utilizzare l'android.jar con il codice di eccezione rimossa, prevista nell'articolo si fa riferimento.

+0

Mi piacerebbe provarlo ... – bytebender

+0

Nessun dado, puoi mostrarmi come sono le tue linee di importazione? – bytebender

+0

ho caricato l'intero progetto eclipse su http://maik.0x2a.at/PowerMockTests.zip. Potrebbe essere necessario adattare il percorso a android.jar – crazymaik

5

Probabilmente non è una risposta diretta alla tua domanda, ma potresti provare Robolectric per testare parti della tua app Android sul tuo PC.

Roboelectric evita lo stub! eccezione minimo implementazione di classi Android

2

Penso che la risposta sia che l'ordine delle librerie di riferimento è importante perché Android.jar include alcuni stub per junit.

Devi assicurarti che sul tuo progetto di test, se vai a 'proprietà' e poi 'Percorso di costruzione Java' che il vaso junit associato alla versione completa di powermock scaricato hai visualizzato su 'Ordina ed Esporta' scheda sopra Android.jar. In caso contrario, il sistema risolve i pacchetti junit.framework e junit.runner da android.jar prima di risolverli dal junit.jar incluso in powermock.

Mi rendo conto che questa domanda è vecchia, ma penso che questa sia la risposta corretta, quindi volevo assicurarmi di documentarla sulla domanda.