2012-03-21 17 views
33

come dice la documentazione di Android, "Si noti che l'API di test di Android supporta lo stile di codice JUnit 3, ma non JUnit 4." (Testing Fundamentals). Dovrebbe essere chiaro che JUnit 4 non può essere usato fuori dalla scatola con Android.Perché JUnit 4 su Android non funziona?

Ma perché è così? È perché i test vengono eseguiti all'interno del DVM (in quanto Android Runtime ha solo il supporto per JUnit 3)? Su una JVM, da sola, è possibile scegliere il runtime JUnit da utilizzare. Non è possibile all'interno del DVM?

+1

Hai visto questa domanda? Forse è quello che stai cercando: http://stackoverflow.com/questions/2172152/cant-run-junit-4-test-case-in-eclipse – bsimic

+1

grazie, ma in realtà non sto cercando questa soluzione. Ovviamente usando questa soluzione è possibile testare POJO con JUnit 4. Ma è impossibile usarlo per le unità di codice che fanno affidamento su classi di framework Android (cioè sono in esecuzione sul dispositivo stesso e non sulla JVM sul mio computer di sviluppo) Sono abbastanza sicuro che è quasi impossibile eseguire i test JUnit 4 nel DVM, ma sto cercando una spiegazione PERCHÉ questo è il caso. – Matthew

+0

Non so perché sia ​​il caso, a parte il fatto che le implementazioni di testing delle unità Android estendono le librerie JUnit3. Sono sicuro che le versioni future del kit di sviluppo Android supporteranno 4. – bsimic

risposta

40

Aggiornamento 2015/10

Ora è possibile tramite l'AndroidJUnitRunner, che fa parte del Android Testing Support Library. In breve, è necessario eseguire le seguenti operazioni in un progetto Gradle-based:

  1. Aggiungi le dipendenze:

    dependencies { 
        compile 'com.android.support:support-annotations:22.2.0' 
        androidTestCompile 'com.android.support.test:runner:0.4.1' 
    } 
    
  2. Specificare il testInstrumentationRunner:

    android { 
        defaultConfig { 
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
        } 
    } 
    
  3. annotare il test classe con @RunWith(AndroidJUnit4.class).

  4. Scrivi i tuoi test in stile JUnit4 normale.

Vedere anche Espresso setup instructions. Si noti che non è necessario l'Espresso stesso per i normali test di JUnit4.

Perché ce n'è bisogno

ci sono pochissime informazioni che ho trovato su internet su questo argomento. La cosa migliore che ho trovato sono le informazioni su InstrumentationTestRunner.

Non c'è nulla che impedisca ai test di JUnit4 di girare su un dispositivo Android come qualsiasi altro codice Java. Tuttavia, il framework di test Android esegue alcuni lavori aggiuntivi:

  1. Invia i risultati del test al computer di sviluppo tramite ADB.
  2. Fa strumentazione (non sono sicuro di cosa si tratti esattamente).

Quanto sopra viene eseguito da alcune estensioni appositamente per JUnit3.

Questo codice specifico di JUnit3 sembra essere parte di InstrumentationTestRunner che fa parte del sistema Android principale. Tuttavia, come è evidente con AndroidJUnitRunner, è possibile utilizzare un programma di test personalizzato che supporti JUnit4 o altri framework.

+0

È possibile aggiungere la dipendenza "androidTestCompile" nel file Android.mk? se così puoi dirmi per favore come? – Ambi

Problemi correlati