单元测试使用Robolectric进行android listview滚动

时间:2013-02-16 17:16:35

标签: unit-testing scroll robolectric

我有一种尝试以编程方式滚动到ListView中某个位置的方法。该方法有一些条件,因此根据应用程序运行的Android SDK版本,它的实现略有不同。

该功能在我测试过的3款Android设备上运行良好。但是,我使用junitRoboelectric编写了一个单元测试,用于检查滚动是否使目标位置的项目可见。测试失败。当我调试时,我注意到android.os.Build.VERSION.SDK_INTRoboelectric一起运行时是{0}(即,在桌面上与设备或模拟器相比)。

我尝试忽略该版本并仅使用ListView.smoothScrollToPosition(),但getFirstVisilePoition()getLastVisiblePosition()方法继续返回0,即使在我调用smoothScrollToPosition(150)之后也是如此。< / p>

是否有人知道是否/如何使用Roboelectric滚动列表视图?

任何帮助将不胜感激 - 我似乎无法找到有关该主题的任何信息。

谢谢,

安娜

1 个答案:

答案 0 :(得分:2)

如果你使用的是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());
    }

}

您可以获得平滑的滚动位置。根据元素的高度,您可以找出哪些是可见的。