Android JUnit testen ClassNotFoundException

Ich versuche, JUnit einzurichten, um meine Aktivitäten für ein Android-Projekt zu testen.

Das Android-Projekt läuft ok auf einem AVD und einem Gerät (es sind noch ein paar Bugs übrig, weshalb ich ein paar Unit-Tests hinzufügen möchte)

  • HttpClient Umleitung auf URL mit Räumen, die Ausnahme auslösen
  • Android: GestureDetector funktioniert nicht (gestureDetector.onTouchEvent (Event) immer falsch) mit Tabs (TabActivity, Tabwidget)
  • Android, wenn ViewPager als Kind einfügen Fehler bekommen android.view.ViewGroup.jumpDrawablesToCurrentState (ViewGroup.java:5035)
  • So testen Sie Content Provider auf Android
  • Android: BitmapFactory.decodeByteArray gibt pixelige Bitmap
  • Fehlende Schaltflächen auf AlertDialog | Android 7.0 (Nexus 5x)
  • Ich folgte den Schritten von diesen Webseiten (sie sind mehr oder weniger das gleiche, aber ich überprüfte immer alle von ihnen nur um sicherzustellen, dass ich alles richtig gemacht habe)
    Http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/
    Http://developer.android.com/tools/testing/testing_eclipse.html

    Ich habe ein Testprojekt mit dem gleichen Arbeitsbereich wie mein Projekt erstellt und meinen ersten Testfall erstellt. Als ich versuchte, den Test zu führen, bekam ich folgendes:

    [2012-12-09 19:42:56 – AssassinTest] Android starten!
    [2012-12-09 19:42:56 – AssassinTest] adb läuft normal.
    [2012-12-09 19:42:56 – AssassinTest] Durchführung android.test.InstrumentationTestRunner JUnit starten
    [2012-12-09 19:42:56 – AssassinTest] Automatischer Zielmodus: Bevorzugte AVD 'Google_Level10' ist auf emulator 'emulator-5554'
    [2012-12-09 19:42:56 – AssassinTest] Hochladen von AssassinTest.apk auf Gerät 'emulator-5554'
    [2012-12-09 19:42:57 – AssassinTest] Installieren von AssassinTest.apk …
    [2012-12-09 19:42:59 – AssassinTest] Erfolg!
    [2012-12-09 19:42:59 – AssassinTest] Projektabhängigkeit gefunden, Installation: Assassine
    [2012-12-09 19:43:01 – Assassine] Anwendung bereits eingesetzt. Keine Notwendigkeit, neu zu installieren.
    [2012-12-09 19:43:01 – AssassinTest] Starten Instrumentierung android.test.InstrumentationTestRunner auf Gerät Emulator-5554
    [2012-12-09 19:43:01 – AssassinTest] Sammeln von Testinformationen
    [2012-12-09 19:43:04 – AssassinTest] Testlauf fehlgeschlagen: Instrumentationslauf fehlgeschlagen aufgrund 'java.lang.ClassNotFoundException'

    Und hier bekomme ich von LogCat:

    12-09 19:43:02.929: E/dalvikvm(1255): Unable to resolve Ludes/assassi/test/InGameActivityTest; annotation class 19 12-09 19:43:02.929: D/AndroidRuntime(1255): Shutting down VM 12-09 19:43:02.929: W/dalvikvm(1255): threadid=1: thread exiting with uncaught exception (group=0x40015560) 12-09 19:43:02.961: E/AndroidRuntime(1255): FATAL EXCEPTION: main 12-09 19:43:02.961: E/AndroidRuntime(1255): java.lang.NoClassDefFoundError: org.junit.Test 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.getDeclaredAnnotations(Native Method) 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:262) 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:188) 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.AccessibleObject.getAnnotation(AccessibleObject.java:196) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.TestMethod.getAnnotation(TestMethod.java:60) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:39) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:30) 12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.util.Predicates$OrPredicate.apply(Predicates.java:106) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:42) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:31) 12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.util.Predicates$NotPredicate.apply(Predicates.java:122) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.TestSuiteBuilder.satisfiesAllPredicates(TestSuiteBuilder.java:254) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:184) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:373) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3246) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread.access$2200(ActivityThread.java:117) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.os.Handler.dispatchMessage(Handler.java:99) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.os.Looper.loop(Looper.java:130) 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread.main(ActivityThread.java:3683) 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.invokeNative(Native Method) 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.invoke(Method.java:507) 12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 12-09 19:43:02.961: E/AndroidRuntime(1255): at dalvik.system.NativeStart.main(Native Method) 12-09 19:43:02.961: E/AndroidRuntime(1255): Caused by: java.lang.ClassNotFoundException: org.junit.Test in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/system/framework/android.test.runner.jar:/data/app/udes.assassin.test-1.apk:/data/app/udes.assassin-2.apk] 12-09 19:43:02.961: E/AndroidRuntime(1255): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:551) 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 12-09 19:43:02.961: E/AndroidRuntime(1255): ... 25 more 

    Bei der Suche auf ein paar Foren, las ich, dass dies durch eine schlechte Manifest-Datei verursacht werden könnte, aber ich sehe nicht, was mit mir falsch ist

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="udes.assassin.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="udes.assassin" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> </application> </manifest> 

    Und schließlich ist das der Code in meiner einzigen JUnit-Klasse (so weit)

     package udes.assassin.test; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import udes.assassin.InGameActivity; import android.test.ActivityInstrumentationTestCase2; public class InGameActivityTest extends ActivityInstrumentationTestCase2<InGameActivity> { public InGameActivityTest() { super("udes.assassin", InGameActivity.class); } public InGameActivityTest(Class<InGameActivity> activityClass) { super(activityClass); } @Before protected void setUp() throws Exception { super.setUp(); } @Test public void testSetItemPosition() { fail("Not yet implemented"); } } 

    Vielen Dank

  • Ist es möglich, eine benutzerdefinierte Schriftart für die gesamte Anwendung festzulegen?
  • Android: Duplizieren von Fragmenten bei der Verwendung von Support Fragment Manager
  • Wie man den Wert einer Variablen auf dem Bildschirm anzeigt
  • Android VM stürzt beim Start von Mac ab
  • Android - Kamera-Berechtigungen verweigert ohne Aufforderung
  • Aktualisiert - Android Facebook api 3.0 Fehler: Kann nicht LoginActivity mit einem null calling package aufrufen
  • 3 Solutions collect form web for “Android JUnit testen ClassNotFoundException”

    Es ist wahrscheinlich, weil JUnit nicht in deinem Klassenpfad ist. Gehen Sie zu Project -> Properties -> Java Build Path -> Order and Export und überprüfen Sie, ob das JUnit-Feld deaktiviert ist.

    Ich merke das, du benutzt @Test-Annotation:

     @Test public void testSetItemPosition() { fail("Not yet implemented"); } 

    Das wird von junit4 eingeführt und android test basiert auf junt3. Siehe hier

    Sie sollten die @Test-Annotation entfernen.

    Gleicher Fehler hier, anderen Grund …

    Meine Testklasse war in einem anonymen Paket, aber es war inconistent mit AndroidManifest.xml:

     <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="micharg.nameanimalthing" /> 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.