2013-04-16 15 views
15

Questa è la prima volta che si installa un android test project per testare un android project.Esecuzione test fallita: esecuzione strumentazione non riuscita a causa di 'java.lang.ClassNotFoundException'

Ho creato un test case molto semplice che sto cercando di ottenere, ma quello che ho non funziona. Ottengo un Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'.

Mi dispiacerebbe di più, tuttavia non ricevo più informazioni, ad esempio quale classe sta cercando di trovare, ecc. Qualche idea su come ottenere maggiori informazioni dall'errore? Eventuali aree comuni dovrei guardare, o qualsiasi cosa che potrebbe aver bisogno di essere configurato che sto trascurando?

riportano di seguito le informazioni dalla console:

[2013-04-16 13:21:49 - XyzProgramTest] Android Launch! 
[2013-04-16 13:21:49 - XyzProgramTest] adb is running normally. 
[2013-04-16 13:21:49 - XyzProgramTest] Performing android.test.InstrumentationTestRunner JUnit launch 
[2013-04-16 13:21:49 - XyzProgramTest] Automatic Target Mode: launching new emulator with compatible AVD 'GalaxyNexusAPI_17' 
[2013-04-16 13:21:49 - XyzProgramTest] Launching a new emulator with Virtual Device 'GalaxyNexusAPI_17' 
[2013-04-16 13:21:53 - Emulator] extension WGL_ARB_make_current_read was not found 
[2013-04-16 13:21:53 - Emulator] extension WGL_EXT_swap_control was not found 
[2013-04-16 13:21:53 - Emulator] Failed to create pbuf surface for FB 0x3004 
[2013-04-16 13:21:53 - Emulator] emulator: WARNING: Could not initialize OpenglES emulation, using software renderer. 
[2013-04-16 13:21:54 - XyzProgramTest] New emulator found: emulator-5554 
[2013-04-16 13:21:54 - XyzProgramTest] Waiting for HOME ('android.process.acore') to be launched... 
[2013-04-16 13:22:55 - XyzProgramTest] HOME is up on device 'emulator-5554' 
[2013-04-16 13:22:55 - XyzProgramTest] Uploading XyzProgramTest.apk onto device 'emulator-5554' 
[2013-04-16 13:22:55 - XyzProgramTest] Installing XyzProgramTest.apk... 
[2013-04-16 13:23:57 - XyzProgramTest] Success! 
[2013-04-16 13:23:57 - XyzProgramTest] Project dependency found, installing: XyzProgram 
[2013-04-16 13:23:57 - XyzProgram] Uploading XyzProgram.apk onto device 'emulator-5554' 
[2013-04-16 13:23:58 - XyzProgram] Installing XyzProgram.apk... 
[2013-04-16 13:24:05 - XyzProgram] Success! 
[2013-04-16 13:24:05 - XyzProgramTest] Launching instrumentation android.test.InstrumentationTestRunner on emulator-5554 
[2013-04-16 13:24:07 - XyzProgramTest] Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException' 

Note aggiuntive:

Nel mio android test project, ho creato un semplice test con un pacchetto simile al pacchetto che corrisponda con la classe che sto provando a testare nel mio android project. Quindi qualcosa come com.company.android.projectname. Ho specificato questo nella sezione instrumentation del file del file .

<instrumentation 
    android:name="android.test.InstrumentationTestRunner" 
    android:targetPackage="com.company.android.projectname" /> 

Quando ho cambiato questo per abbinare che, ottengo un nuovo errore che dice Test run failed: Unable to find instrumentation target package: com.company.android.projectname

sono sicuro al 100% quello che targetPackage dovrebbe essere e se ho bisogno di più strumentazioni per ogni pacchetto che voglio per testare, ecc. Quando l'ho impostato su com.company.android, cioè quando ricevo il numero java.lang.ClassNotFoundException. Qualsiasi suggerimento sarebbe apprezzato, nel frattempo continuerò i miei sforzi per capirlo da solo.

risposta

5

capito il mio problema e sto postando la risposta a scopo di documentazione ...

La radice del mio problema era 2 cose diverse:

  1. ho fatto qualche refactoring, che cambiano la posizione della mia android.app.Application classe e le mie attività. Ciò ha reso il mio programma principale non funzionante in quanto avevo bisogno di aggiornare il mio manifest nel mio android project.
  2. Dopo aver effettuato gli aggiornamenti al mio manifest nel mio progetto Android, ho dovuto apportare alcuni aggiornamenti nel mio android test project per puntare alla posizione aggiornata della classe che si estende android.app.Application.

Successivamente, è stato pulito e testato nuovamente e le cose andavano bene.

+11

Puoi spiegare che cosa esattamente sei cambiato nella seconda fase del progetto di test? –

+0

Spiega di più per favore –

+0

@PawelByszewski, @Binghammer È passato un po 'di tempo da quando ho fatto il post, ma dalla memoria ... ho spostato la posizione della classe che ha esteso 'android.app.Application'. Penso di aver migliorato il layout dei miei nomi di pacchetti e di aver spostato questa classe nel processo. Perché ho fatto questo, ho dovuto aggiornare il suo riferimento nel file manifest. Per esempio. Se in eclissi, fare doppio clic su 'AndroidManifest.xml', quindi modificare la scheda in fondo a' AndroidManifest.xml', quindi cercare '

0

Ho riscontrato questo problema dopo un'unione, in cui build.gradle stava specificando il pacchetto di test errato, poiché utilizzavo il valore predefinito.

Semplicemente rimuovendo queste righe da build.gradle, è stato in grado di trovare le classi necessarie nel pacchetto predefinito, ovvero src/androidTest.

sourceSets { 
    instrumentTest.setRoot('src/instrumentTest') 
} 
//removed this to use the default androidTest source set. 

Questa probabilmente non è la soluzione esatta, ma si spera che guidi qualcuno nella giusta direzione.

6

FYI mi sono imbattuto in questo e dovuto aggiungere

<uses-library android:name="android.test.runner"/>

nel mio <application/> tag

0

Ho incontrato questo problema oggi, ho adottato Android-specifica formica build.xml che seduto nella directory "$ {sdk.dir}/tools/ant /" per eseguire tutti i test case in riga di comando, ma lo STDOUT mi segnala un errore proprio come il tuo:

vinceMacBook ~/dev/aSQLite+-android/tests$ ant clean uninstall debug install test 
... 
test: 
    [echo] Running tests ... 
    [exec] INSTRUMENTATION_RESULT: shortMsg=java.lang.ClassNotFoundException 
    [exec] INSTRUMENTATION_RESULT: longMsg=java.lang.ClassNotFoundException: 
     android.test.InstrumentationTestRunner 
    [exec] INSTRUMENTATION_CODE: 0 

ho trascorrere qualche tempo per capire questo, ho trovato la causa principale a causa della del AndroidManifest.xml modulo di radice, ho pensato che il applicazione elemento è nulla di cui configurare così ho omesso che nell'elemento manifesta, che causano il mio problema.

Non sono sicuro che condividiate la stessa struttura con me, quindi inserisco qui la struttura del mio progetto, anche il contenuto del file chiave, la speranza può aiutare qualcuno.

vinceMacBook ~/dev/aSQLite+-android$ tree 
. 
├── AndroidManifest.xml 
│  <?xml version="1.0" encoding="utf-8"?> 
│  <manifest 
│   xmlns:android="http://schemas.android.com/apk/res/android" 
│   package="com.vincestyling.asqliteplus" 
│   android:versionCode="1" 
│   android:versionName="0.1"> 
│ 
│   <uses-sdk android:minSdkVersion="8" /> 
│   
│   <!-- important configuration, cannot be omit even if nothing to say. --> 
│   <application /> 
│ 
│  </manifest> 
│ 
├── build.xml 
│  unchanged, generated by "android create project <project_name>" command. 
│ 
├── project.properties 
│  unchanged, generated by "android create project <project_name>" command. 
│ 
├── src 
│   └── com 
│    └── vincestyling 
│     └── asqliteplus 
│      ├── DBOperator.java 
│      ├── DBOverseer.java 
│      └── the library source code lie here... 
│ 
└── tests 
    ├── AndroidManifest.xml 
    │  <?xml version="1.0" encoding="utf-8"?> 
    │  <manifest 
    │   xmlns:android="http://schemas.android.com/apk/res/android" 
    │   package="com.vincestyling.asqliteplus.tests"> 
    │ 
    │   <application> 
    │    <uses-library android:name="android.test.runner"/> 
    │   </application> 
    │ 
    │   <instrumentation 
    │    android:name="android.test.InstrumentationTestRunner" 
    │    android:targetPackage="com.vincestyling.asqliteplus"/> 
    │ 
    │  </manifest> 
    │ 
    ├── ant.properties 
    │  # [Comments], [Comments], [Comments] which generated by command. 
    │  # [Comments], [Comments], [Comments] which generated by command. 
    │  # [Comments], [Comments], [Comments] which generated by command. 
    │ 
    │  # important configuration, point to the root library module. 
    │  tested.project.dir=../ 
    │ 
    ├── build.xml 
    │  unchanged, generated by "android create test-project <project_name>" command. 
    │ 
    └── src 
        └── com 
        └── vincestyling 
         └── asqliteplus 
          ├── BaseDBTest.java 
        ├── QueryStatementTest.java 
        └── the test source code lie here... 

mia struttura del progetto ha seguito Android Test Projects 's descrizione che Google ci suggerisce di fare, sono costituite da modulo di libreria radice che trasportano core logic, e il modulo di prova che all'interno del modulo principale. Sopra sono le risorse chiave nel progetto, ma non erano tutti i file, posterò il link del progetto qui una volta che l'ho rilasciato.

------------ Aggiornamento 2014/01/06 --------------

Attualmente, il mio progetto è stato pubblicato sul mio GitHub: aSQLitePlus-android, controllare i dettagli se interessati.

Problemi correlati