Android Espresso:等待活动完成/开始

时间:2014-06-10 15:59:37

标签: android testing android-espresso

是否存在使用Espresso等待特定活动完成或启动的规范解决方案?

我的SplashActivity会出现几秒钟,然后是MainActivity。我希望Espresso与MainActivity交互,而不是SplashActivity,但我似乎无法找到有关等待这种情况的任何信息。

我能找到的最接近的事情是提到闲置资源,但我不清楚如何使用它来等待活动。

1 个答案:

答案 0 :(得分:5)

我猜你的启动活动正在执行一些初始化。

如果是这种情况,我的建议是定义某种侦听器模式,以便在初始化完成时能够获得回调。然后,您可以使Espresso等待使用IdlingResource进行初始化。

注意:以下不是完整的代码,但它是为了给你一个提示:

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

onApplicationInitCompleted()是你定义的回调,当Splash Activity和初始​​化完成时必须调用它。

最后,通过在测试设置中调用Espresso.registerIdlingResource,向Espresso注册这个新的IdlingResource。