2013-10-22 9 views
61

Sto provando a compilare il mio progetto Android in Android Studio 0.3.0. Oggi ricevo il seguente errore:Eccezione nel thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter

Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:188) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:113) 
Caused by: java.lang.ClassNotFoundException: junit.textui.ResultPrinter 
at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
... 3 more 

Process finished with exit code 1 

Facendo alcune ricerche web mi porta a credere che questo problema è in qualche modo legato alla JUnit. Tuttavia, non sto usando JUnit nel mio progetto. Forse ho inavvertitamente attivato un'opzione? In tal caso, come si disabilitano i test delle unità nel mio progetto? Qualche idea?

+1

Prova ad aggiungere i vasi (probabilmente junit) nella directory lib !!! –

+1

@Janne Stai provando a eseguire i test unitari in isolamento? Se è così, quella potrebbe essere la causa di questo errore come l'ho ricevuto. –

risposta

57

Finalmente trovato. È nella finestra di dialogo Esegui/Debug Configurations. Disabilitato JUnit e ricompila nuovamente.

+10

Ho avuto lo stesso problema su Android Studio 0.4.2.In realtà ho provato a eseguire un test come normale caso di test JUnit invece di Android Test Case. – pkk

+13

Perché non è possibile eseguire un TestSuite come un normale caso di test JUnit? –

+2

@IgorGanapolsky Esecuzione come test JUnit anziché test Android significa che verrà eseguito sul sistema host anziché su un dispositivo. L'esecuzione come test di Android implementa l'apk di test sul dispositivo e lo esegue lì (sotto dalvik vm). Molto tempo fa ho avuto l'installazione di Eclipse in modo da poter eseguire test JUnit contro il codice all'interno di un progetto Android; tuttavia, ha funzionato solo per le classi che non hanno utilizzato classi Android (Attività, Visualizza, Intenti, ecc.). Se ne sono inclusi, esiste un'implementazione stub per supportare la compilazione rispetto alla firma, ma quando viene eseguita genera una RuntimeException: "Stub!" –

-2

Basta mettere la soluzione che ha funzionato per me, questo dovrebbe essere provato se si sta configurando l'ambiente per la prima volta:

per Windows: 1) nelle variabili d'ambiente aggiungere un nuovo "variabili di sistema" ANDROID_SDK_HOME = D: \ Programmi \ android-sdk-windows (seleziona la tua home directory di android sdk)

2) modifica le variabili di sistema Percorso, aggiungi "% Android_SDK_HOME% \ tools;"

6

Forzare il progetto di "sync" tramite il menu: Strumenti> Android> Progetto di sincronizzazione con i file Gradle o forzare il progetto di "sync" per fare un cambiamento falso nel file di build.gradle (aggiungere uno spazio e quindi eliminarlo e quindi fare clic su "sincronizzazione ora").

+0

Che non ha funzionato Lo risolvo per me. –

+0

Sì! Grazie :) –

26

Di solito questo problema è causato a causa del tipo di test sbagliato: Junit invece di Android prova Select Android test instead of JUnit Select Android test instead of JUnit

1

Nei miei Run/Debug Configurazioni ho avuto Mytest sotto AndroidTests e sotto JUnitTests. Il MyTest sotto AndroidTests è stato configurato correttamente, ma ho ancora l'errore 'NoClassDefFoundError: junit/textui/ResultPrinter'. Cliccato su MyTest sotto JUnit e premuto '-' in alto a sinistra. Ciò ha permesso a MyTest di funzionare attraverso il dispositivo per eliminare l'errore.

8

Per i test JUnit standard, vi manca la libreria JUnit, prova ad aggiungere questo build.gradle:

dependencies { 
    ... 
    testCompile 'junit:junit:4.12' 
    ... 
} 

E assicurarsi che si sta mettendo i test nel "test" directory parallell al "principale "pacchetto (i test di strumentazione vanno in" androidTest ", ma questa è un'impostazione diversa).

+0

'src/test/java' Rif: [Esegui test unità locali] (http://developer.android.com/training/testing/start/index.html#build) –

0

Ho avuto due volte questo problema dopo aver modificato alcuni plugin e dipendenze build.gradle.

Basta spegnere e riaccendere Android Studio per risolverlo (versioni 2.1.2 e 2.2).

0

Tutte le risposte sono bene-

assicurarsi di avere sourceSets hanno la directory test registrato.

android{ 
    ... 

    defaultConfig { 
     ... 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 


    sourceSets { 
     androidTest { 
      java.srcDirs = ['src/androidTest/java'] 
     } 
    } 
} 

dependencies{ 
    ... 
    androidTestCompile 'junit:junit:4.12' 
    androidTestCompile 'com.android.support.test:runner:0.5' 
} 
Problemi correlati