2014-06-10 12 views
10

Gibt es eine kanonische Lösung, die Espresso verwendet, um auf eine bestimmte Aktivität zum Beenden oder Starten zu warten?Android Espresso: Warten, bis die Aktivität beendet/gestartet wird

Ich habe eine SplashActivity, die für ein paar Sekunden erscheint, dann eine MainActivity. Ich möchte, dass Espresso mit der MainActivity und nicht mit der SplashActivity interagiert, aber ich kann keine Informationen darüber finden, wie ich auf eine solche Bedingung warten kann.

Die nächste Sache, die ich finden kann, ist eine Erwähnung von ungenutzten Ressourcen, aber es ist mir nicht klar, wie ich das hier verwenden würde, um auf die Aktivität zu warten.

Antwort

5

Ich denke, Ihre Splash-Aktivität führt einige Initialisierung.

Wenn dies der Fall ist, ist mein Vorschlag, eine Art von Listener-Muster zu definieren, um einen Rückruf zu erhalten, wenn die Initialisierung abgeschlossen ist. Dann können Sie Espresso mit einer IdlingResource auf die Initialisierung warten lassen.

NB: Das Folgende ist nicht vollständig Code, aber es soll Ihnen einen Hinweis auf geben, wie dies zu tun:

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

Wo onApplicationInitCompleted() ist der Rückruf Sie definiert und die aufgerufen werden muss, wenn Die Splash-Aktivität und damit die Initialisierung ist abgeschlossen.

Schließlich registrieren Sie diese neue IdlingResource mit Espresso, indem Sie Espresso.registerIdlingResource im Test-Setup aufrufen.

Verwandte Themen