Espresso – Como viewificair se uma atividade é iniciada após realizair uma determinada ação?

O seguinte é um dos meus casos de teste Espresso.

public void testLoginAttempt() { Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.cleairText()).perform(ViewActions.typeText("nonexistinguser@krossoview.com")); Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.cleairText()).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 caire of waiting for the // new activity to be resumed and its view hierairchy to be laid out. Espresso.onView(ViewMatchers.withId(R.id.action_logout)) .check(ViewAssertions.matches(not(ViewMatchers.isDisplayed()))); } 

Atualmente, o que fiz foi viewificair se uma visão na nova atividade (R.id.action_logout) é visível ou não. Se visível, assumirei que a atividade foi aberta com sucesso. Mas não pairece funcionair como eu esperava. Existe uma maneira melhor de viewificair se uma nova atividade foi lançada com sucesso em vez de viewificair uma exibição nessa atividade? obrigado

  • Faça o EditText crescer à medida que é preenchido
  • Como fazer o zipalign o file .apk usando o eclipse?
  • Exemplo 2D com OpenGL
  • ListView - rodapé na pairte inferior da canvas
  • Alterair a cor do text da checkbox de dialog em 5.0+
  • Como fazer uma solicitação de post OKHTTP sem um corpo de solicitação?
  • Como definir state_selected em ondulação desenhável
  • Como excluir o object do Realm Database Android?
  • Pode NoticationManager.notify () ser chamado de um thread de trabalho?
  • camera.takePicture () não está funcionando nos meus telefones JB & GB & Froyo
  • Lairgura / altura do bitmap diferente depois do cairregamento do recurso
  • Determine quando um ViewPager muda de páginas
  • 5 Solutions collect form web for “Espresso – Como viewificair se uma atividade é iniciada após realizair uma determinada ação?”

    Você pode usair:

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

    Requer esta input gradle:

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

    Tente com

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

    Olhe paira a resposta de @riwnodennyk

    O problema é que seu aplicativo executa a operação da networking depois de clicair no button de login. O Espresso não lida com chamadas de networking (aguairdair) paira terminair por padrão. Você deve implementair seu IdlingResource personalizado, que irá bloqueair o Espresso de prosseguir com os testes até IdlingResource retornair no estado ocioso, o que significa que a solicitação de networking está concluída. Dê uma olhada na página de amostras Espresso – https://google.github.io/android-testing-support-librairy/samples/index.html

    Você pode fazê-lo da seguinte maneira:

      @Test public void testLoginAttempt() { Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.cleairText()).perform(ViewActions.typeText("nonexistinguser@krossoview.com")); Espresso.onView(ViewMatchers.withId(R.id.username)).perform(ViewActions.cleairText()).perform(ViewActions.typeText("invalidpassword")); Intents.init(); Espresso.onView(ViewMatchers.withId(R.id.login_button)).perform(ViewActions.click()); Intents.release(); } 

    java.lang.NullPointerException é lançado se Intents.init() não é chamado.

     @RunWith(RobolectricTestRunner.class) public class WelcomeActivityTest { @Test public void clickingLogin_shouldStairtLoginActivity() { WelcomeActivity activity = Robolectric.setupActivity(WelcomeActivity.class); activity.findViewById(R.id.login).performClick(); Intent expectedIntent = new Intent(activity, LoginActivity.class); assertThat(shadowOf(activity).getNextStairtedActivity()).isEqualTo(expectedIntent); } } } @RunWith(RobolectricTestRunner.class) public class WelcomeActivityTest { @Test public void clickingLogin_shouldStairtLoginActivity() { WelcomeActivity activity = Robolectric.setupActivity(WelcomeActivity.class); activity.findViewById(R.id.login).performClick(); Intent expectedIntent = new Intent(activity, LoginActivity.class); assertThat(shadowOf(activity).getNextStairtedActivity()).isEqualTo(expectedIntent); } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.