Android Espresso: дождитесь окончания/начала действия

Есть ли каноническое решение, использующее Espresso для ожидания завершения или запуска определенного действия?

У меня есть SplashActivity, которая появляется на несколько секунд, затем MainActivity. Я хочу, чтобы Espresso взаимодействовал с MainActivity, а не с SplashActivity, но я не могу найти никакой информации об ожидании такого условия.

Самое близкое, что я могу найти, это упоминание о простаивающих ресурсах, но мне не ясно, как я буду использовать это здесь, чтобы дождаться действия.


person SuperDeclarative    schedule 10.06.2014    source источник


Ответы (1)


Я предполагаю, что ваша активность всплеска выполняет некоторую инициализацию.

Если это так, я предлагаю определить какой-то шаблон прослушивателя, чтобы иметь возможность получить обратный вызов после завершения инициализации. Затем вы можете заставить Espresso ждать инициализации с помощью IdlingResource.

NB: следующий код НЕ является полным, но он предназначен для того, чтобы дать вам подсказку о том, как это сделать:

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 и, следовательно, инициализация выполняются.

Наконец, зарегистрируйте этот новый IdlingResource в Espresso, вызвав Espresso.registerIdlingResource в настройках теста.

person Luigi Massa Gallerano    schedule 11.06.2014