Tentativo di stub Classe di attività Android utilizzando PowerMockito getta RuntimeException “Stub!”

StackOverflow https://stackoverflow.com/questions/3739737

Domanda

Ho trovato questo esempio dove hanno usato PowerMock e EasyMock a stub / deridere il Menu e MenuItem classi per android. Ho cercato di fare qualcosa di simile con PowerMock e Mockito con la classe di attività.

Mi rendo conto che un sacco di metodi sono definitive e che nella Android.jar tutti basta buttare RuntimeException ( "stub").

Capisco anche che questo test non è completo, ma ho solo voglia di vedere se è possibile prendere in giro la classe Activity Android.

Ma dato che PowerMock consente di classi finte con metodi finali non dovrebbe questo codice lavoro?

@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" verrebbe restituito 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?

È stato utile?

Soluzione

Ho appena provato il tuo codice di esempio e funziona qui, strano. Ho scaricato PowerMock 1.4.5 con Mockito e JUnit incluse le dipendenze e usato l'android.jar dalla sdk (2.2). Non riesce solamente ad eccezione se mi tolgo la @PrepareForTest.

Modifica

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

Altri suggerimenti

Probabilmente non è una risposta diretta alla tua domanda, ma si potrebbe provare a Robolectric al fine di testare parti della vostra app Android sul vostro PC.

Roboelectric evita lo Stub! eccezione e ti dà un po 'di minima Android implementazione classi

Credo che la risposta è che l'ordine delle biblioteche questioni cui si fa riferimento in quanto l'android.jar comprende alcuni stub per JUnit.

È necessario garantire che il vostro progetto di prova, se si va a 'Proprietà' e poi 'Java Build Path' che il vaso JUnit associato con la versione completa di powermock scaricato compare sulla scheda 'Ordine e Export' sopra l'android.jar. In caso contrario, il sistema risolve i pacchetti junit.framework e junit.runner da android.jar prima che le risolve dal junit.jar incluso nel powermock.

Mi rendo conto che questa domanda è vecchia, ma penso che questa è la risposta corretta così ho voluto fare in modo di documentare che sulla questione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top