Iniciar una segunda actividad dentro de un TestCase (que no es la actividad bajo prueba)

¿Cómo puedo iniciar una segunda actividad (simulacro) en un ActivityInstrumentationTestCase2 o InstrumentationTestCase?

Mi problema es este:

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

… los resultados en el error "la intención en el proceso … se resuelve a diferentes procesos … prueba". El uso de getTargetContext () para los resultados de Intent en "no se puede resolver la actividad para Intent", ya que mi clase de simulacro no forma 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 ----- 

Las aplicaciones de prueba no son "aplicaciones" en el sentido tradicional y no pueden iniciar sus propias actividades. Si necesita probar cómo su actividad responde a otras actividades enviándolo intenciones, puede usar el método ActivityInstrumentationTestCase2.setActivityIntent (Intent) para inyectar las diversas intenciones 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 } } 
  • Espresso inyectando un objeto simulador presentador
  • Siempre obtener el error de hilo incluso si la prueba de unidad pasa en Android usando Mockito
  • ¿Es posible simular el cursor sqlite3 en Android cuando no existe db o tabla?
  • MockRetrofit y BehaviorDelegate ignoran el OkHttpClient
  • Android simulacro de ubicación en el dispositivo?
  • ¿Alguien tuvo el éxito burlándose HttpRequests con Robolectric?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.