2011-08-07 21 views
5

¿Cómo puedo iniciar una segunda actividad (simulada) en ActivityInstrumentationTestCase2 o InstrumentationTestCase?Iniciar una segunda actividad dentro de un TestCase (que no es la actividad bajo prueba)

Mi problema es el siguiente:

Intent intent = new Intent(getInstrumentation().getContext(), MyMock.class); 
myMock = (MyMock) getInstrumentation().startActivitySync(intent); 

... resultados en el error "intención en proceso ... resuelve a diferentes procesos de prueba ...". El uso de getTargetContext() para el resultado resulta en "no se puede resolver la actividad para el intento", ya que mi clase simulada no es parte del paquete de la aplicación.

08-07 19:38:25.822: INFO/TestRunner(2656): ----- begin exception ----- 
08-07 19:38:25.822: INFO/TestRunner(2656): java.lang.RuntimeException: Unable to resolve activity for: Intent { cmp=com.cocktails/.test.recipes.RecipeBookMock } 
08-07 19:38:25.822: INFO/TestRunner(2656):  at android.app.Instrumentation.startActivitySync(Instrumentation.java:447) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at com.cocktails.test.recipes.RecipeUpdaterTest.testNewRecipe(RecipeUpdaterTest.java:55) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:191) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:181) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at junit.framework.TestCase.runBare(TestCase.java:127) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at junit.framework.TestResult$1.protect(TestResult.java:106) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at junit.framework.TestResult.runProtected(TestResult.java:124) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at junit.framework.TestResult.run(TestResult.java:109) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at junit.framework.TestCase.run(TestCase.java:118) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:164) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:151) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:425) 
08-07 19:38:25.822: INFO/TestRunner(2656):  at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1520) 
08-07 19:38:25.832: INFO/TestRunner(2656): ----- end exception ----- 
+0

Al usar un [Intención] (http://developer.android.com/reference/android/app/Activity.html#StartingActivities)? –

+0

He concretizado la pregunta – cody

+0

Publique la salida completa de StackTrace/LogCat. –

Respuesta

3

Las aplicaciones de prueba no son "aplicaciones" en el sentido tradicional y no pueden iniciar sus propias actividades. Si necesita probar cómo responde su actividad a otras actividades enviándoles intenciones, puede usar el método ActivityInstrumentationTestCase2.setActivityIntent (Intención) para inyectar los diversos intentos que desea probar, antes de llamar realmente a getActivity().

public class ExampleTest extends ActivityInstrumentationTestCase2 { 

    // if your test runs on the UI thread, you will need to setActivityIntent() 
    // in setUp() as you won't have a chance to do it before the activity 
    // is started 

    // @UiThreadTest 
    public void testMockIntent() { 
     setActivityIntent(new Intent()); 
     Activity foo = getActivity(); 

     assertNotNull(foo); // your tests 
    } 
} 
Cuestiones relacionadas