Prueba de Android JUnit ClaseNotFoundException

Estoy intentando configurar JUnit para probar mis actividades para un proyecto androide.

El proyecto Android se ejecuta bien en un AVD y un dispositivo (todavía quedan algunos errores, por lo que quiero añadir algunas pruebas de unidad)

Seguí los pasos de estos sitios web (son más o menos lo mismo, pero todavía he comprobado todos ellos para asegurarse de que lo hice todo correctamente)
Http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/
Http://developer.android.com/tools/testing/testing_eclipse.html

Creé un proyecto de prueba utilizando el mismo espacio de trabajo que mi proyecto y creé mi primer caso de prueba. Cuando intenté ejecutar la prueba, obtuve lo siguiente:

[2012-12-09 19:42:56 – AssassinTest] Lanzamiento de Android!
[2012-12-09 19:42:56 – AssassinTest] adb se está ejecutando normalmente.
[2012-12-09 19:42:56 – AssassinTest] Realización de android.test.InstrumentationTestRunner Lanzamiento de JUnit
[2012-12-09 19:42:56 – AssassinTest] Modo automático de destino: Preferido AVD 'Google_Level10' está disponible en el emulador 'emulator-5554'
[2012-12-09 19:42:56 – AssassinTest] Subir AssassinTest.apk en el dispositivo 'emulator-5554'
[2012-12-09 19:42:57 – AssassinTest] Instalando AssassinTest.apk …
[2012-12-09 19:42:59 – AssassinTest] ¡Éxito!
[2012-12-09 19:42:59 – AssassinTest] Dependencia del proyecto encontrada, instalando: Assassin
[2012-12-09 19:43:01 – Assassin] Aplicación ya desplegada. No es necesario reinstalar.
[2012-12-09 19:43:01 – AssassinTest] Lanzamiento de la instrumentación android.test.InstrumentationTestRunner en el dispositivo emulador-5554
[2012-12-09 19:43:01 – AssassinTest] Recolección de información de prueba
[2012-12-09 19:43:04 – AssassinTest] Se ha producido un error en la ejecución de la prueba: La ejecución de la instrumentación ha fallado debido a 'java.lang.ClassNotFoundException'

Y aquí es lo que obtengo de 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 

Al buscar en algunos foros, he leído que esto podría ser causado por un mal archivo de manifiesto, pero no veo lo que está mal con la mía

 <?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> 

Y finalmente, este es el código en mi única clase de JUnit (hasta ahora)

 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"); } } 

Gracias

Probablemente es porque JUnit no está en su classpath. Vaya a Project -> Properties -> Java Build Path -> Order and Export y compruebe si el cuadro JUnit está desactivado.

Me doy cuenta de que, está utilizando @Test anotación:

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

Eso es introducido por junit4, y la prueba de Android basada en junt3. Ver aquí

Debe eliminar la anotación @Test.

El mismo error aquí, otra razón …

Mi clase de prueba estaba en un paquete anónimo pero era inconistente con AndroidManifest.xml:

 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="micharg.nameanimalthing" /> 
  • "Los animadores sólo se pueden ejecutar en subprocesos Looper" durante las pruebas de instrumentación en dispositivo
  • Prueba de Android JUnit4
  • Android RxJava 2 Prueba JUnit - getMainLooper en android.os.Looper no se burla de RuntimeException
  • Unidad de prueba de un receptor de radiodifusión?
  • Cómo burlar getApplicationContext
  • Intentando probar SQLiteOpenHelper pero getWritableDatabase () lanza Null
  • Mocking up WifiManager para la prueba de unidad Android
  • Módulo de prueba de inyección con dagger2
  • VerifyError con PowerMock en Android
  • Android - Junit - Proyecto probado utiliza Jar externo
  • Android Studio 3.0 Canary 1: Las pruebas de Kotlin o las pruebas de Java referentes a las clases de Kotlin fallan
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.