2015-09-17 5 views
0

Работа и кнопка на нем. Задача состоит в том, чтобы передать тест «белого ящика» для воздействия поведения Последствия активности «Кнопка CLICK -> Кнопка GONE -> Активность PAUSE -> Активность RESUME» в состоянии видимости кнопки.Синхронизация потока пользовательского интерфейса с отправленными состояниями просмотра, зависящими от событий рабочего потока?

Наивная реализация ведет к непоследовательным государственной деятельности и, следовательно, неправильных тестов выходов:

// worker thread 
TouchUtils.clickView(this, mButton); 
... 
// ui thread 
instrumentation.callActivityOnStop(mActivity); 
instrumentation.callActivityOnResume(mActivity); 
assertTrue(View.GONE == mButton.getVisibility()); 

Два Glympse подходы не В случае успешного:

1) Добавление сна для основного потока после TouchUtils.clickView() исполнения, однако не полностью решить проблему, но создает дополнительную зависимость от продолжительности тайм-аута эмпирического UI.

2) Синхронизация событий прикосновения и последующее активность событий жизненного цикла вызова через onPostExecute() от AsyncTask вызывает тесты на неудачу непредсказуемо.

Есть ли какое-нибудь каноническое или, по крайней мере, жизнеспособное решение для синхронизации рабочего-пользователя на общем или специально разработанном для платформы Android Test?

ответ

0

Надо использовать runOnMainSync() из Instrumentation.class для синхронизации UI и рабочих потоков событий с помощью Android Framework Контрольно-измерительных приборов:

// worker thread 
TouchUtils.clickView(this, mButton); 
instrumentation.runOnMainSync(new Runnable() { 
    @Override 
    public void run() { 
     instrumentation.callActivityOnStop(mActivity); 
     instrumentation.callActivityOnResume(mActivity); 
     assertTrue(View.GONE == mButton.getVisibility()); 
    } 
}); 

Однако, если есть какие-либо другие предложения или вообще (не Android Test Framework связанного).

Примечание: дополнительные средства для синхронизации с основной резьбой описаны в официальном best practices for testing.

Смежные вопросы