2014-06-10 36 views
10

Belirli bir Etkinlik'in bitmesini beklemek veya başlatmak için Espresso kullanarak kanonik bir çözüm var mı?Android Espresso: Aktivitenin bitmesini bekleyin/başlatın

Birkaç saniye boyunca görüntülenen bir SplashActivity, sonra bir MainActivity var. Espresso'nun SplashActivity ile değil, MainActivity ile etkileşmesini istiyorum, ancak böyle bir durumun beklenmesi hakkında hiçbir bilgi bulamıyorum.

Bulabildiğim en yakın şey, boşta kalan kaynaklardan bahseder, ancak bunun, Etkinlik için beklemek için bunu nasıl kullanacağımı açıklığa kavuşturmamasıdır.

cevap

5

Sanırım, açılış etkinliğiniz bazı başlatma işlemlerini gerçekleştiriyor.

Böyle bir durum söz konusuysa, önerim, başlatma işlemi tamamlandığında geri arama alabilmek için bir çeşit dinleyici modeli tanımlamaktır. Ardından, Espresso'yu IdlingResource ile başlatmayı bekleyebilirsiniz.

Not: Aşağıdaki komple kod DEĞİLDİR, ama size bunu nasıl bir ipucu vermek içindir:

onApplicationInitCompleted() tanımladıktan ve hangi çağrılmalıdır geri arama olduğunu
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(); 
     } 
    } 
} 

zaman Sıçrama Etkinliği ve böylece başlatma işlemi tamamlandı.

Son olarak, Espresso.registerIdlingResource öğesini test kurulumunda arayarak bu yeni IdlingResource'u Espresso'yla kaydedin.

İlgili konular