técnicas tareas rápida retraso recuperar proyectos proyecto plan para obra justificar fast ejecución cronograma contingencia como causas atrasos atrasado android android-activity android-espresso

android - tareas - Espresso: ¿cómo puedo verificar si una actividad se lanza después de realizar una determinada acción?



retraso de tareas en project (7)

Asegúrese de que la biblioteca de intención Espresso encuentre en las dependencias gradle

androidTestImplementation "com.android.support.test.espresso:espresso-intents:3.0.1"

Luego importe estos dos en su archivo de prueba

import static android.support.test.espresso.intent.Intents.intended import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent

A continuación, agregue IntentsTestRule en su clase de prueba

@Rule @JvmField val mainActivityRule = IntentsTestRule(MainActivity::class.java)

Por último, compruebe que la actividad ha lanzado intención

@Test fun launchActivityTest() { onView(ViewMatchers.withId(R.id.nav_wonderful_activity)) .perform(click()) intended(hasComponent(WonderfulActivity::class.java!!.getName())) }

el siguiente es uno de mis casos de prueba Espresso.

public void testLoginAttempt() { Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.clearText()).perform(ViewActions.typeText("[email protected]")); Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.clearText()).perform(ViewActions.typeText("invalidpassword")); Espresso.onView(ViewMatchers.withId(R.id.login_button)).perform(ViewActions.click()); // AFTER CLICKING THE BUTTON, A NEW ACTIVITY WILL POP UP. // Clicking launches a new activity that shows the text entered above. You don''t need to do // anything special to handle the activity transitions. Espresso takes care of waiting for the // new activity to be resumed and its view hierarchy to be laid out. Espresso.onView(ViewMatchers.withId(R.id.action_logout)) .check(ViewAssertions.matches(not(ViewMatchers.isDisplayed()))); }

Actualmente, lo que hice fue verificar si una vista en la nueva actividad (R.id.action_logout) es visible o no. Si es visible, asumiré que la actividad se abrió con éxito. Pero no parece funcionar como esperaba. ¿Hay una mejor manera de verificar si una actividad nueva se lanzó exitosamente en lugar de verificar que una vista en esa actividad esté visible? Gracias


El problema es que su aplicación realiza la operación de red después de hacer clic en el botón de inicio de sesión. Espresso no maneja (espera) las llamadas de red para finalizar de manera predeterminada. Debe implementar su IdlingResource personalizada, que impedirá que Espresso continúe con las pruebas hasta que IdlingResource regrese en estado Inactivo, lo que significa que la solicitud de red ha finalizado. Eche un vistazo a la página de muestras de Espresso - https://google.github.io/android-testing-support-library/samples/index.html


Prueba con

intended(hasComponent(new ComponentName(getTargetContext(), ExpectedActivity.class)));

Mira la respuesta de @riwnodennyk


Puedes hacerlo de la siguiente manera:

@Test public void testLoginAttempt() { Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.clearText()).perform(ViewActions.typeText("[email protected]")); Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.clearText()).perform(ViewActions.typeText("invalidpassword")); Intents.init(); Espresso.onView(ViewMatchers.withId(R.id.login_button)).perform(ViewActions.click()); Intents.release(); }

java.lang.NullPointerException se lanza si no se llama a Intents.init() .


Puedes usar:

intended(hasComponent(YourExpectedActivity.class.getName()));

Requiere esta entrada gradle:

androidTestCompile ("com.android.support.test.espresso:espresso-intents:$espressoVersion")

La importación para el intended() y hasComponent()

import static android.support.test.espresso.intent.Intents.intended; import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent;

como lo menciona Shubam Gupta, recuerde llamar a Intents.init() antes de llamar a la intended() . Eventualmente puede llamarlo en el método @Before .


Tratar:

intended(hasComponent(YourActivity.class.getName()));

Además, ten en cuenta

java.lang.NullPointerException se lanza si Intents.init() no se llama antes de lo intended()


@RunWith(RobolectricTestRunner.class) public class WelcomeActivityTest { @Test public void clickingLogin_shouldStartLoginActivity() { WelcomeActivity activity = Robolectric.setupActivity(WelcomeActivity.class); activity.findViewById(R.id.login).performClick(); Intent expectedIntent = new Intent(activity, LoginActivity.class); assertThat(shadowOf(activity).getNextStartedActivity()).isEqualTo(expectedIntent); } }