Модульное тестирование прокрутки списка Android с использованием Roboelectric

У меня есть метод, который пытается программно прокрутить до позиции в ListView. Метод имеет некоторые условия, поэтому его реализация немного отличается в зависимости от версии Android SDK, в которой работает приложение.

Функциональность отлично работает на 3 устройствах Android, на которых я тестировал. Тем не менее, я написал модульный тест, используя junit и Roboelectric, который проверяет, сделала ли прокрутка элемент в целевой позиции видимый. Тест не проходит. Когда я отлаживаю, я замечаю, что android.os.Build.VERSION.SDK_INT равно 0 при работе с Roboelectric (т. е. на рабочем столе по сравнению с устройством или эмулятором).

Я пробовал игнорировать версию и просто использовать ListView.smoothScrollToPosition(), но методы getFirstVisilePoition() и getLastVisiblePosition() продолжают возвращать 0 даже сразу после вызова smoothScrollToPosition(150).

Кто-нибудь знает, можно ли/как проверить прокрутку списка с помощью Roboelectric?

Любая помощь будет оценена по достоинству - я не могу найти никакой информации по теме.

Спасибо,

Ана


person Ana M    schedule 16.02.2013    source источник


Ответы (1)


Если вы используете robolectric 1.1 или 1.2, вот источник AbsListView: https://github.com/pivotal/robolectric/blob/master/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAbsListView.java

Похоже, что вся функциональность прокрутки — это ShadowAdapterView: https://github.com/pivotal/robolectric/blob/master/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAdapterView.java

Не похоже, что getFirstVisiblePoition() или getLastVisiblePosition() реализованы.

Мне удалось получить положение плавной прокрутки.

@RunWith(RobolectricTestRunner.class)
public class SmoothScroll {

    @Test
    public void testSmoothScroll() {
        Activity context = new Activity();
        ListView view = new ListView(context);

        view.smoothScrollToPosition(100);
        Assert.assertEquals(100, Robolectric.shadowOf(view).getSmoothScrolledPosition());
    }

}

Вы можете получить положение с плавной прокруткой. Основываясь на высоте элементов, вы можете определить, какие из них видны.

person Joe    schedule 16.02.2013