2014-06-10 4 views
10

Existe-t-il une solution canonique utilisant Espresso pour attendre la fin ou le démarrage d'une activité spécifique?Android Espresso: Attendre la fin de l'activité

J'ai une SplashActivity qui apparaît pendant quelques secondes, puis une MainActivity. Je veux qu'Espresso interagisse avec MainActivity, pas avec SplashActivity, mais je n'arrive pas à trouver d'informations sur l'attente d'une telle condition.

La chose la plus proche que je peux trouver est une mention de ressources inutilisées, mais ce n'est pas clair pour moi comment j'utiliserais cela ici pour attendre l'activité.

Répondre

5

Je suppose que votre activité de démarrage effectue une initialisation. Si c'est le cas, ma suggestion est de définir une sorte de modèle d'écoute afin d'être en mesure d'obtenir un rappel lorsque l'initialisation est terminée. Ensuite, vous pouvez demander à Espresso d'attendre l'initialisation avec IdlingResource.

NB: Ce qui suit ne code complet, mais il est destiné à vous donner un indice sur la façon de le faire:

public class SplashIdlingResource implements IdlingResource, YourApplicationInitListener { 

    // volatile because can be set by a different 
    // thread than the test runner: the one calling back 
    private volatile boolean mIsInitialized; 

    private ResourceCallback mCallback; 

    public SplashIdlingResource() { 
     YourApplication application = // retrieve your Application object 
     mIsInitialized = application.isInitialized(); 
     if (!mIsInitialized) { 
      application.addInitListener(this); 
     } 
    } 

    @Override 
    public String getName() { 
     return SplashIdlingResource.class.getName(); 
    } 

    @Override 
    public boolean isIdleNow() { 
     return mIsInitialized; 
    } 

    @Override 
    public void registerIdleTransitionCallback(ResourceCallback callback) { 
     mCallback = callback; 
    } 

    @Override 
    public void onApplicationInitCompleted() { 
     m_isInitialized = true; 
     if (m_callback != null) { 
      m_callback.onTransitionToIdle(); 
     } 
    } 
} 

Où onApplicationInitCompleted() est la fonction de rappel que vous avez défini et qui doit être appelée lorsque l'activité Splash, et donc l'initialisation, est terminée.

Enfin, enregistrez cette nouvelle IdlingResource avec Espresso en appelant Espresso.registerIdlingResource dans la configuration de test.

Questions connexes