Espresso comment tester si l'activité est terminée?

Je souhaite affirmer que mon Acitivty que je teste actuellement est terminé lorsque certaines actions sont effectuées. Malheureusement jusqu'à présent, je ne peux l'affirmer qu'en ajoutant du sommeil à la fin du test. Y a-t-il une meilleure façon?

import android.content.Context; import android.os.Build; import android.support.test.rule.ActivityTestRule; import android.test.suitebuilder.annotation.LargeTest; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import static org.junit.Assert.assertTrue; @SuppressWarnings("unchecked") @RunWith(JUnit4.class) @LargeTest public class MyActivityTest { Context context; @Rule public ActivityTestRule<MyActivity> activityRule = new ActivityTestRule(MyActivity.class, true, false); @Before public void setup() { super.setup(); // ... } @Test public void finishAfterSomethingIsPerformed() throws Exception { activityRule.launchActivity(MyActivity.createIntent(context)); doSomeTesting(); activityRule.getActivity().runOnUiThread(new Runnable() { @Override public void run() { fireEventThatResultsInTheActivityToFinishItself(); } }); Thread.sleep(2000); // this is needed :( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { assertTrue(activityRule.getActivity().isDestroyed()); } } } 

  • Appium vs Espresso pour cadre de test automatisé
  • Android Marshmallow: Testez les autorisations avec Espresso?
  • Exécutez un test d'instrumentation en utilisant Espresso: Classe ref dans la classe pré-vérifiée résolue à une mise en œuvre inattendue
  • Kotlin et New ActivityTestRule: le @Rule doit être public
  • "Aucun test trouvé" pour les tests d'instrumentation pour Lollipop et ci-dessus
  • Espresso - Comment vérifier si une activité est lancée après avoir effectué une certaine action?
  • Utilisation de Espresso pour cliquer sur l'affichage à l'intérieur de l'élément RecyclerView
  • Android révoque l'autorisation au début de chaque test
  • 3 Solutions collect form web for “Espresso comment tester si l'activité est terminée?”

    Dans mon cas, je peux tester isFinishing() :

    assertTrue(activityTestRule.getActivity().isFinishing());

    au lieu de:

      Thread.sleep(2000); // this is needed :( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { assertTrue(activityRule.getActivity().isDestroyed()); } 

    Un autre avantage de isFinishing() est que vous n'avez pas besoin de la vérification de la version.

    Vous pouvez utiliser l'exemple StartActivityForResult ci-dessous, plus de descriptions dans les liens.

    Comment démarrer l'activité de FirstActivity:

     Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1); 

    Voilà comment terminer votre SecondActivity pour revenir au premier (sans résultat d'envoi):

     Intent returnIntent = new Intent(); setResult(Activity.RESULT_CANCELED, returnIntent); finish(); 

    Comment augmenter l'événement lorsque SecondActivity est terminé (est écrit dans FirstActivity):

     @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { } }//onActivityResult 

    Plus vous pouvez trouver ici: http://developer.android.com/training/basics/intents/result.html et comment gérer `startActivityForResult` sur Android? Il existe également la façon dont vous pouvez envoyer les données que vous souhaitez obtenir de SecondActivity.

    Je ne sais pas si c'est une bonne pratique mais cela a fonctionné pour moi:

     assertTrue(mTestRule.getActivity() == null); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.