Mocking Intent Extras en Espresso Tests
Estoy tratando de lanzar Activity
en Espresso. La cosa es que quiero poner mocked extras a la Intent
que estoy usando para iniciar la Activity
. Aquí está el ejemplo.
@RunWith(AndroidJUnit4.class) public final class NiceActivityTester { @Rule public final ActivityTestRule<NiceActivity> activityRule = new ActivityTestRule<>(NiceActivity.class, true, false); @Test public void justStartPlease() { NiceThing niceThing = Mockito.mock(NiceThing.class); Mockito.when(niceThing.getName()).thenReturn("Nice!"); Intent intent = new Intent(InstrumentationRegistry.getTargetContext(), NiceActivity.class); intent.putExtra("NICE_THING", niceThing); activityRule.launchActivity(intent); } }
Lamentablemente unmarshalling Parcelable
falla.
- No hay error aún Android Studio dice que "no se encontraron pruebas"
- Google play alfa publicar va a prod?
- Cómo generar el gesto de zoom / pellizco para probar para Android
- Pruebas para las masas con un solo teléfono y un emulador
- ¿Cómo detengo la locura del mono?
java.lang.RuntimeException: Unable to start activity ComponentInfo{app.application/app.application.activity.NiceActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: NiceThing_Proxy at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: NiceThing_Proxy at android.os.Parcel.readParcelableCreator(Parcel.java:2295) at android.os.Parcel.readParcelable(Parcel.java:2245) at android.os.Parcel.readValue(Parcel.java:2152) at android.os.Parcel.readArrayMapInternal(Parcel.java:2485) at android.os.BaseBundle.unparcel(BaseBundle.java:221) at android.os.Bundle.getParcelable(Bundle.java:755) at android.content.Intent.getParcelableExtra(Intent.java:5088) at app.application.NiceActivity.getNiceThing(NiceActivity.java:40) at app.application.NiceActivity.setUpToolbar(NiceActivity.java:30) at app.application.NiceActivity.onCreate(NiceActivity.java:20) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.support.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:534) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
¿Hay alguna manera de usar los extras Intent
con Intent
? Tal vez algunas buenas prácticas en esta área?
Realmente no quiero hacer constructores para cada modelo que estoy usando, algunas de estas clases son bastante complejas con una docena de campos. Espiar el extra o el Intent
usando Mockito no ayuda.
- Establecer GoogleInstrumentationTestRunner para AndroidStudio
- ¿Deshabilitar temporalmente el acceso a Internet en android?
- Prueba de varios dispositivos Android en una máquina
- Android prueba testPreconditions
- Diferencia entre InstrumentationTestCase y AndroidTestCase
- Pruebas de Android, ¿cómo simular multitouch (zoom in / out) utilizando instrumentos?
- Android UIAutomator haga clic en el dispositivo
- Pruebas de androide
Utilice ActivityTestRule
y getActivityIntent
Ejemplo encontrado aquí
public class MainActivityLaunchIntentTest { @Rule public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<MainActivity>(MainActivity.class) { @Override protected Intent getActivityIntent() { Context targetContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); Intent result = new Intent(targetContext, MainActivity.class); result.putExtra("Name", "Earth"); return result; } }; @Test public void shouldShowHelloEarth() { onView(withId(R.id.main__tv_hello)).check(matches(withText("Hello Earth!"))); } }
- Error de aplicación en HttpLoggingInterceptor
- Estilos, minHeight / maxHeight: No puedo obtener el maxHeight para anular el tema minHeight