6

Ho iniziato a utilizzare Android Studio e gradle di recente per lo sviluppo di Android e lo trovo molto meglio nel complesso di eclipse/ant o maven. Tuttavia, di recente ho iniziato a provare a implementare alcuni tipi di unità e test di integrazione con la mia app. Sono stato in grado di eseguire test di base utilizzando la struttura Espresso rilasciata di recente da Google. Ho fatto alcuni test anche se dovevo prendere in giro e iniettare versioni di oggetti derisi. Ho usato il pugnale in passato per un altro progetto, quindi ho incluso il pugnale nel mio progetto. Tuttavia ora il mio test non verranno eseguiti a causa del seguente errore:Usare android gradle + dagger per eseguire instrumentTests

gradle connectedCheck 

...

4.1.2 failed: Instrumentation run failed due to 'java.lang.IllegalAccessError' :EspressoApp:connectedCheck

ho creato un semplice demo di questo qui: https://github.com/mwolfe38/android-espresso-dagger

Proprio clone e poi dalla riga di comando run: gradle connectedCheck

In quanto sopra ho provato le dipendenze in modi diversi, originariamente in questo modo:

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile 'com.squareup.dagger:dagger-compiler:1.1.0' 
    compile 'com.squareup.dagger:dagger:1.1.0' 

    instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar', 
      'libs/testrunner-1.0-SNAPSHOT.jar', 
      'libs/testrunner-runtime-1.0-SNAPSHOT.jar') 
    instrumentTestCompile 'org.hamcrest:hamcrest-all:1.3' 
    instrumentTestCompile 'com.google.guava:guava:15.0' 
} 

ma questo mi dà un errore riguardo all'inizializzazione statica. Questo sembra essere causato da qualche codice di inizializzazione statico nel quadro dell'espresso relativo al pugnale. Quindi, dopo aver aggiunto le dipendenze del pugnale a instrumentTestCompile, ho ricevuto l'errore IllegalAccessError menzionato sopra.

Chiunque ha fortuna tra cui il pugnale nel progetto e il test dell'espresso?

risposta

11

Abbiamo preso un po 'di tempo ma finalmente l'ho fatto funzionare. Ho dovuto fare quanto segue:

  1. Dichiarare le mie dipendenze in questo modo:

    dependencies { 
        compile 'com.android.support:appcompat-v7:+' 
        compile 'com.squareup.dagger:dagger-compiler:1.1.0' 
        compile 'com.squareup.dagger:dagger:1.1.0' 
    
        instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar','libs/testrunner-1.0-SNAPSHOT.jar','libs/testrunner-runtime-1.0-SNAPSHOT.jar') 
        instrumentTestCompile files('libs/hamcrest-core-1.1.jar', 'libs/hamcrest-library-1.1.jar', 'libs/hamcrest-integration-1.1.jar') 
        instrumentTestCompile 'com.google.guava:guava:14.0.1' 
    } 
    
  2. Copiare i vasi hamcrest da here

  3. Rimuovere i file di licenza dei vasi come questo (o altrimenti visualizzerai un errore sui file LICENSE.txt duplicati)

    zip -d hamcrest-core-1.1.jar LICENSE.txt 
    zip -d hamcrest-library-1.1.jar LICENSE.txt 
    
  4. Run Gradle connectedCheck

Un paio di cose da notare:
- Hamcrest 1.3 non ha funzionato per me, ha ottenuto un errore su un matcher mancava - Crazy quanti cerchi ho dovuto fare i salti per arrivare qui.
- Buona fortuna ottenere questo per giocare bene con Android Studio.

+1

Si potrebbe pensare che si possa prendere l'espresso del tempo come un .aar .... – jophde

+0

sì o basta mettere questo in centrale maven in modo da poterlo includere come ogni altra dipendenza. Un tale dolore! Sto amando il kit di prova ora che funziona, ma farlo funzionare è stato un incubo! –

+1

Io uso Eclipse e questo non mi aiuta. – Viacheslav

0

Ok, così ho avuto a che fare con questo problema per ore, e qui è il mio fix: Mettere questo nelle dipendenze del vostro build.gradle

compile(project(':commons:statemachine')) { 
    exclude module: 'junit' 
    exclude module: 'json' 
    exclude module: 'guava' 
} 

compile 'com.google.guava:guava:15.0' 
instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT-bundled.jar') 
instrumentTestCompile 'com.squareup:fest-android:1.0.+' 

Aggiungere il espresso vaso in bundle nel cartella libs del tuo test. Ora arriva la parte importante.

aperta che l'espresso in bundle vaso con WinRar o equivalente e andare a com/cartella, quindi selezionare la cartella di Android ed eliminarlo. Ora chiudi WinRar e compila ed esegui il tuo test :-)