2014-06-10 6 views
10

Esiste una soluzione canonica che utilizza Espresso per attendere che un'attività specifica venga completata o avviata?Android Espresso: attendere che l'attività termini/inizi

Possiedo un'Attività Splash visualizzata per alcuni secondi, quindi un'Attività Principale. Voglio che Espresso interagisca con MainActivity, non con SplashActivity, ma non riesco a trovare alcuna informazione sull'attesa di una tale condizione.

La cosa più vicina che riesco a trovare è una menzione di risorse inutilizzate, ma non mi è chiaro come utilizzerei qui per aspettare l'attività.

risposta

5

Immagino che la tua attività splash stia eseguendo un'inizializzazione.

In questo caso, il mio suggerimento è di definire una sorta di pattern listener per poter ottenere una richiamata al termine dell'inizializzazione. Quindi, puoi fare in modo che Espresso attenda l'inizializzazione con IdlingResource.

NB: Il seguente non è codice completo, ma ha lo scopo di dare un suggerimento su come farlo:

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(); 
     } 
    } 
} 

Dove onApplicationInitCompleted() è il callback definito e che deve essere chiamato quando l'attività Splash e così l'inizializzazione è terminata.

Infine, registrare questo nuovo IdlingResource con Espresso chiamando Espresso.registerIdlingResource nella configurazione di prova.