2011-06-27 20 views
6

me usó Fragment de compatibilidad Android paquete, usando la android-support-v4.jar. Pero no puedo hacer la prueba JUnit en esto.Prueba FragmentActivity Junit

Mi principal clase FragmentActivity se declara como sigue

public class MyActivityClass extends FragmentActivity{ 
............... 
} 

Luego, en mi proyecto de prueba

public class MyActivityClassTest extends ActivityInstrumentationTestCase2<MyActivityClass> { 
    public MyActivityClassTest() { 
     super("com.android.myproject", MyActivityClass.class); 
    } 
    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
     ................... 
    } 

    public void testPreconditions() { 
     ................. 
    } 
    public void testNotNull(){ 
     ................ 
    } 
} 

Pero cuando corro como Android JUnit Test producir FailedToCreateTests[Runner:Junit3]
Si no traza

java.lang.RuntimeException: Exception during suite construction 
at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:239) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447) 
Caused by: java.lang.reflect.InvocationTargetException 
at com.android.myproject.test.MyActivityClassTest.<init>(MyActivityClassTest.java:28) 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:446) 
at android.test.suitebuilder.TestMethod.instantiateTest(TestMethod.java:87) 
at android.test.suitebuilder.TestMethod.createTest(TestMethod.java:73) 
at android.test.suitebuilder.TestSuiteBuilder.addTest(TestSuiteBuilder.java:263) 
at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:185) 
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:336) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3982) 
at android.app.ActivityThread.access$2900(ActivityThread.java:119) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1901) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4363) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NoClassDefFoundError: com.android.myproject.MyActivityClass 
... 19 more 

Cuando cambié a MyActivityClass extiende Activity funcionó bien (MyActivityClass extends Activity)
me usó el mismo android-support-v4.jar en mi prueba y la principal proyecto

Respuesta

7

he encontrado una solución

El problema se

Caused by: java.lang.NoClassDefFoundError: com.android.myproject.MyActivityClass 

No puede encontrar la ruta de clase a pesar de que me refiero el mismo frasco en ambos proyectos (I también trató mediante el uso de frasco separado tanto para el proyecto)

Ahora, he creado mi entorno de prueba en el mismo proyecto , entonces se trabajó

En mi AndroidManifest.xml

<manifest...> 
    <!-- For doing JUnit test, Instrumentation Start (remove later) --> 
    <instrumentation 
     android:targetPackage="com.pe.android.isccasinos" 
     android:name="android.test.InstrumentationTestRunner" /> 
    <!-- For doing JUnit test, Instrumentation End (remove later) --> 
    <application ...> 
    ................ 
    <!-- For doing JUnit test, add library starting (remove later) --> 
     <uses-library 
      android:name="android.test.runner" /> 
     <!-- For doing JUnit test, add library ending (remove later) --> 
    </application> 
<manifest> 

Luego he añadido mi clase de pruebas en mi paquete especial para probar

extends ActivityInstrumentationTestCase2<fragmentActivity> 

Ahora todo está funcionando bien :)

+2

Esto funciona con éxito, pero me gustaría saber por qué sucede cuando se usa un proyecto de prueba por separado ... – brk3

0

Mi conjetura es que ActivityInstrumentationTestCase2 no es compatible con Fragments. Deberías probar algo como Robolectric.

+0

No, es compatible. Cuando creé mi prueba en el mismo proyecto, funcionó. Gracias Marcarse por ese enlace. :) –

7

ActivityInstrumentationTestCase2 es compatible con Fragments. Sólo debe seguir los pasos mencionados en Android Testing: External libraries, que ha sido actualizado para cubrir el caso de la android-support-v4.jar también.

Entonces, usted será capaz de escribir pruebas como ésta:

public void testFragmentManager() { 
    FragmentActivity activity = getActivity(); 
    assertNotNull(activity.getSupportFragmentManager()); 
} 

o lo que tenga que probar.

+0

Gracias Dtmilano, ese enlace que proporcionó es realmente útil, pero he agregado esa ruta de compilación para las bibliotecas externas. Todavía mala suerte para mí. Cuando creé mi prueba en el mismo proyecto, funcionó :) –

+0

Lo que ha publicado es una solución que le llevará a otro problema: cómo no enviar las pruebas con su aplicación. –

+0

¿Estás usando Eclipse? Estoy seguro de que funciona porque lo estoy usando. –

1

Ésta es tarde, pero a resolver el mismo problema por única añadiendo el android-apoyo-v4.jar dependencia al proyecto principal, y sacarla de la proyecto de prueba.

Luego, asegúrese de que el proyecto principal se encuentre en la ruta de compilación del proyecto de prueba. Haz lo mismo para cualquier otra biblioteca principal, y los proyectos de prueba pueden compartir.

0

he probado casi de un día para hacer frente a este problema y ha encontrado una solución de otro post

Básicamente tu android-support-v4.jar (en mi caso) se utiliza en la aplicación debe ser el mismo con lo que has usado en tu aplicación de prueba. La mejor manera de hacerlo es eliminar el mismo jar del directorio libs de su proyecto de prueba y exportarlo desde su proyecto de aplicación. De esta forma, puedes deshacerte de este problema con seguridad.

Cuestiones relacionadas