2014-06-10 15 views
10

Czy istnieje rozwiązanie kanoniczne przy użyciu Espresso, aby poczekać na zakończenie lub rozpoczęcie określonej czynności?Android Espresso: Poczekaj, aż aktywność się zakończy/uruchom

Mam wartość SplashActivity wyświetlaną przez kilka sekund, a następnie funkcję MainActivity. Chcę, aby Espresso wchodził w interakcję z MainActivity, a nie SplashActivity, ale nie mogę znaleźć żadnych informacji o oczekiwaniu na taki stan.

Najbliższa rzecz, jaką mogę znaleźć, to wzmianka o nieużywanych zasobach, ale nie jest dla mnie jasne, w jaki sposób mogę ją wykorzystać, aby poczekać na działanie.

Odpowiedz

5

Domyślam się, że Twoja aktywność powitalna wykonuje pewne inicjowanie.

Jeśli tak jest, moją sugestią jest zdefiniowanie pewnego rodzaju wzorca słuchacza, aby móc uzyskać wywołanie zwrotne po zakończeniu inicjowania. Następnie możesz sprawić, by Espresso poczekało na inicjalizację przy pomocy IdlingResource.

Uwaga: Poniższy nie jest kompletny kod, ale to znaczy, że daje wskazówkę, w jaki sposób to zrobić:

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

Gdzie onApplicationInitCompleted() jest zwrotna zdefiniowano i która musi zostać wywołana, gdy Aktywność Splash, a więc inicjalizacja, jest wykonywana.

Wreszcie, zarejestruj nowy IdlingResource z Espresso, wywołując Espresso.registerIdlingResource w konfiguracji testowej.

Powiązane problemy