2015-03-12 5 views
81

Sono nuovo nel mondo dei test e ancora di più nel mondo dei test su Android. Mentre faccio ricerche su Robolectric che aiuta con i test su Android, una cosa mi confonde di più. A volte sul web vedo persone che usano la parola chiave testCompile nelle dipendenze dello script gradle build quando si fa riferimento a Robolectric mentre altri usano androidTestCompile. Certamente entrambi non possono essere validi?Confuso su testCompile e androidTestCompile in Android Gradle

Qualcuno può spiegare la differenza tra entrambi e quale di questi dovrebbe essere quello utilizzato quando si utilizza Robolectric?

risposta

114

Semplicemente testCompile è la configurazione di test di unità (quelli situati in src/test) e androidTestCompile viene utilizzato per il test di api (che trova src/androidTest). Poiché si intende scrivere test unitari, è necessario utilizzare testCompile.

Update: La distinzione principale tra i due è il test corre sourceset in un regolare Java JVM, mentre i test androidTest sourceset eseguiti su un dispositivo Android (o un emulatore).

+0

Grazie. Questo è quello che ho pensato all'inizio, ma se questo è il caso per cui alcune dipendenze robolectric di riferimento con testCompile e alcune con AndroidTestCompile. Non è una libreria che aiuta a scrivere test di integrazione? Se è così allora non dovrebbe essere referenziato con androidTestCompile? Comunque anche la guida ufficiale di robolectric si rivolge a testCompile ... Scusate ma a questo punto mi sembra troppo confuso come potete vedere. – Lucas

+2

Le convenzioni di denominazione sono un po 'strane.Fondamentalmente, se stai scrivendo unit test (test che non saranno eseguiti sul dispositivo) allora sarebbero presenti in 'src/test' e quindi le loro dipendenze appartengono alla configurazione 'testCompile'. Le dipendenze aggiunte alla configurazione di 'androidTestCompile' saranno disponibili solo per l'origine in 'src/androidTest', che in realtà è incorporato in un APK e distribuito su un dispositivo. –

+0

Grazie per avermi indicato in qualche direzione. Non ha risposto a tutte le mie domande, ma mi ha aiutato durante le mie ricerche. Giusto per chiarire quello che hai detto, i Test unitari non sono solo quelli nella cartella di test (di default). Ironicamente le chiamate google a volte i test si trovano in AndroidTest anche come Unit Test. Dipende dal corso allo scopo di test particolari, ma aggiunge ancora alla confusione. – Lucas

3

per rispondere alla tua domanda - Uso testCompile per robolectric

perché, perché corre robolectric sulla JVM beffardo tutto il comportamento del dispositivo Android.

testCompile e androidTestCompile sono cartelle Android "per convenzione" che gradle utilizza durante l'esecuzione delle attività fornite dal plug-in Android.

androidTestDebug raccoglie i test dalla cartella androidTest, testDebug raccoglie i test dalla cartella di prova,

Anche in questo caso sono solo per convenzione le cartelle si può dare gli insiemi di origine per queste configurazioni

Nota: caffè espresso è una libreria come impressionante cercare di allontanarsi da robolectric :)

0

// centralina controllata

testCompile 'junit:junit:4.12' 

Il codice sopra riportato è una dipendenza di JUnit 4 nel file build.gradle in Android Studio. Si vede che ha testCompile, perché JUnit gira su JVM e non richiede un dispositivo o un emulatore per l'esecuzione. Ciò significa anche che i test di JUnit non richiedono il contesto dell'applicazione per funzionare e se richiedono che avremmo bisogno di "MOCK".

// Insturmented Unit Testing

androidTestCompile('com.android.support.test:runner:0.5', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 

Ora vediamo androidTestCompile qui, perché questa volta abbiamo intenzione di utilizzare il dispositivo o l'emulatore per i test, cioè il test Strumentazione. Per ulteriori chiarimenti suggerirei di leggere da developer.android.com