2013-02-12 18 views
15

Sto scrivendo i test per il progetto Android in questo momento e semplicemente non capisco perché questo è un tale dolore! Dopo un'intera giornata di messa a punto ho finalmente farlo funzionare, ma ora, dopo che ho scritto diverse classi di test IntelliJ IDEA stands:L'esecuzione della strumentazione non è riuscita a causa di 'java.lang.IllegalAccessError'

Test failed to run to completion. Reason: 'Instrumentation run failed due to 'java.lang.IllegalAccessError''. Check device logcat for details 
Test running failed: Instrumentation run failed due to 'java.lang.IllegalAccessError' 

I test ho girato solo un paio di minuti fa non possono essere eseguiti più . Prendendo in considerazione sono tornato al mio ultimo commit in cui tutto era l'ideale e non stavo cambiando alcuna impostazione mi chiedo solo perché.

Ecco cosa logcat sta dicendo:

02-12 20:16:09.398: E/AndroidRuntime(4922): FATAL EXCEPTION: main 
02-12 20:16:09.398: E/AndroidRuntime(4922): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.view.MenuInflater$MenuState.readItem(MenuInflater.java:327) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.view.MenuInflater.parseMenu(MenuInflater.java:147) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.view.MenuInflater.inflate(MenuInflater.java:97) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at <package>.ui.CheckPasswordActivity.onCreateOptionsMenu(CheckPasswordActivity.java:130) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.support.v4.app._ActionBarSherlockTrojanHorse.onCreatePanelMenu(_ActionBarSherlockTrojanHorse.java:45) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:556) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.java:60) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.app.SherlockFragmentActivity.onCreatePanelMenu(SherlockFragmentActivity.java:154) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:407) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:769) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:201) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.view.Choreographer.doFrame(Choreographer.java:531) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.os.Handler.handleCallback(Handler.java:725) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.os.Looper.loop(Looper.java:137) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at dalvik.system.NativeStart.main(Native Method) 

Anche se non ho nemmeno toccato questa classe, la linea CheckPasswordActivity: 130 si riferisce è solo:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.menu_check_password, menu); 
     return true; 
    } 
+0

suona come un problema di dipendenza con la libreria di supporto. controlla le dipendenze delle impostazioni del modulo di test (F4 in IDEA) che sia la libreria di supporto che ActionBarSherlock hanno ambiti "forniti" –

+0

Puoi dirmi di più per favore? Ho abs, modulo dove sono le mie fonti, libreria di supporto e modulo di test dove sono i miei test. Come dovrebbero essere queste dipendenze? – Eugene

+0

Nelle impostazioni del modulo assicurarsi che gli ambiti siano forniti per abs e la libreria di supporto –

risposta

23

Ho finalmente trovato una soluzione. Il problema era con le dipendenze in effetti, non si sa ancora il motivo per cui è abituato a lavorare e poi improvvisamente ha rifiutato, ma ecco come le dipendenze dovrebbe essere simile per il vostro modulo di test:

enter image description here

Quindi tutto in tutto ciò che serve per assicurarsi che tutte le librerie e le librerie di progetto siano elencate per il modulo di test e contrassegnate come "Fornite" eccetto Robotium lib, che è "Compile".

+0

Questo ha funzionato per me. Nel mio caso, ho anche avuto dipendenze dalle librerie di Mockito. In sostanza ho contrassegnato tutte le dipendenze come "Fornite", ad eccezione delle librerie da cui dipendeva direttamente il mio progetto di test. Quelli sono stati contrassegnati come "Compile". –

1

Sulla base di your other question. .. Penso di avere un setup simile a te ... Ecco come sono impostate le mie dipendenze (leggi sotto-articoli come dipendenze)

  • ActionBarSherlock
    • android-supporto-v4
  • modulo Android
    • ActionBarSherlock
    • android-supporto-v4
  • Unit Test
    • robotium
    • modulo Android

Tutte le dipendenze sono tutti setup come "compilazione"

utilizzare ActionBarSherlock dal codice sorgente e che il modulo ha "è un progetto di libreria" selezionata.

+0

Ho le stesse dipendenze, li ho controllati due volte, non ha aiutato - Non riesco ancora ad eseguire alcuni dei miei test per ragioni sconosciute. – Eugene

0

Ho appena avuto lo stesso problema che provo a fare dopo aver risolto il problema.

Rimuovere android-support-v4 lib dal progetto di test (o qualsiasi lib duplicata per tale argomento). Pulisci i progetti e costruiscili di nuovo.

0

Aggiungere la seguente riga:

manifestmerger.enabled=true 

al file project.properties del vostro progetto di applicazione.

Ha fatto la correzione per me :) aveva un progetto con un Progetto Biblioteche

+0

dove aggiungi questa linea? –

+0

nel file project.properties del progetto eclipse (ui test projecT) – cV2

2

Nel mio caso, è a causa di vasi duplicati di essere inclusi.

Problemi correlati