2013-02-12 8 views
15

Ich schreibe Tests für Android-Projekt jetzt und verstehe einfach nicht, warum ist das so ein Schmerz! Ich bekomme es schließlich nach einem ganzen Tag von Setup arbeiten, aber jetzt, nachdem ich mehrere Testklassen geschrieben haben IntelliJ IDEA steht:Instrumentierungslauf fehlgeschlagen wegen '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' 

Die Tests, die ich vor ein paar Minuten lief kann nicht mehr ausgeführt werden . Unter Berücksichtigung, dass ich zu meinem letzten Commit zurückgekehrt bin, wo alles ideal war und ich keine Einstellungen ändere, frage ich mich nur, warum. Hier

ist, was logcat sagt:

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) 

Obwohl ich nicht einmal diese Klasse berührt hat, die CheckPasswordActivity Linie: 130 es sich bezieht, ist nur:

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

klingt wie ein Abhängigkeitsproblem mit der Support-Bibliothek. Überprüfen Sie die Abhängigkeiten Ihrer Testmodul-Einstellungen (F4 in IDEA), dass sowohl die Support-Bibliothek als auch ActionBarSherlock mit 'bereitgestellten' Bereichen arbeiten. –

+0

Können Sie mir bitte mehr sagen? Ich habe ABS, Modul, wo meine Quellen sind, Support-Bibliothek und Test-Modul, wo meine Tests sind. Wie sollten diese Abhängigkeiten aussehen? – Eugene

+0

Stellen Sie in den Moduleinstellungen sicher, dass die Bereiche für abs und die Unterstützungsbibliothek bereitgestellt werden. –

Antwort

23

Ich habe endlich eine Lösung gefunden. Das Problem war, mit Abhängigkeiten in der Tat, es ist immer noch nicht bekannt, warum es zur Arbeit und dann verweigerte plötzlich, aber hier ist, wie die Abhängigkeiten wie für Ihre Testmodul aussehen sollte:

enter image description here

Also alles in allem was Sie brauchen um sicherzustellen, dass alle Ihre Bibliotheken und Projektbibliotheken für Ihr Testmodul aufgeführt und als "Bereitgestellt" markiert sind, mit Ausnahme von Robotium lib, was "Kompilieren" bedeutet.

+0

Das hat für mich funktioniert. In meinem Fall hatte ich auch Abhängigkeiten von Mockito-Bibliotheken. Ich habe im Wesentlichen alle Abhängigkeiten als "Bereitgestellt" markiert, mit Ausnahme der Bibliotheken, von denen mein Testprojekt direkt abhängig war. Diese wurden als "Kompilieren" gekennzeichnet. –

1

Basierend auf your other question. .. ich denke ich habe sowas ähnliches Setup wie du ... Hier ist so ziemlich wie meine Abhängigkeiten eingestellt sind (Unterelemente als Abhängigkeiten lesen)

  • ActionBarSherlock
    • android-support-v4
  • Android Modul
    • ActionBarSherlock
    • android-support-v4
  • Einheit Test
    • Robotium
    • Android Modul

Alle Abhängigkeiten sind alle Setup als "kompilieren"

I ActionBarSherlock aus dem Quellcode verwenden und das Modul hat "Ist ein Bibliotheksprojekt" geprüft.

+0

Ich habe die gleichen Abhängigkeiten, habe sie doppelt überprüft, habe nicht geholfen - ich kann immer noch einige meiner Tests aus unbekannten Gründen nicht ausführen. – Eugene

0

Ich hatte gerade das gleiche Problem versuchen, folgendes zu tun, da es das Problem gelöst hat.

Entfernen Sie Android-Unterstützung-V4-Lib von Ihrem Test-Projekt (oder jede Lib, die für diese Angelegenheit verdoppelt wird). Säubern Sie Projekte und bauen Sie sie wieder auf.

0

Fügen Sie die folgende Zeile ein:

manifestmerger.enabled=true 

auf Ihre project.properties-Datei Ihrer Anwendung Projekt.

das Update für mich getan hat :) Hatte ein Projekt mit einem Bibliotheksprojekt

+0

wo fügen Sie diese Zeile hinzu? –

+0

in der Datei project.properties des Eclipse-Projekts (ui test projecT) – cV2

2

In meinem Fall ist es aufgrund der doppelten Gläser enthalten sind.

Verwandte Themen