Я пишу тесты UI с помощью Espresso. Приложение тесно сотрудничает с сервером, поэтому во многих случаях мне нужно дождаться, когда будет вычисляться либо значение, либо данные будут получены и отображены, и т.д. Espresso предлагает использовать IdlingResource для этого. Мои классы IdlingResource выглядят так (простой и понятный пример).
public class IRViewVisible implements IdlingResource {
private View view;
private ResourceCallback callback;
public IRViewVisible(View view) {
this.view = view;
}
@Override
public String getName() {
return IRViewVisible.class.getName();
}
@Override
public boolean isIdleNow() {
if(view.getVisibility() == View.VISIBLE && callback != null) {
callback.onTransitionToIdle();
return true;
}
return false;
}
@Override
public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
this.callback = resourceCallback;
}
}
Пожалуйста, поправьте меня, если я ошибаюсь где угодно (иногда мне кажется, что мои IdlingResources работают неправильно).
Я регистрирую ресурс холостого хода в setUp()
следующим образом:
IRViewVisible ir = new IRViewVisible(View v);
Espresso.registerIdlingResources(ir).
Отмените регистрацию на tearDown().
Я нашел эту статью (есть раздел "Зарегистрировать компонент, связанный с экземпляром Activity" ) - я не использую его схему, но я проверил hashcode который был установлен в IdlingResource после регистрации (в каждом методе), и это не тот же вид - все хэши разные.
Другой вопрос: один тестовый класс (это результат) не может влиять на другой тестовый класс, не так ли?