首页 > 解决方案 > 滚动视图的滚动操作在单元测试时不起作用

问题描述

我有以下问题。我正在为 custom进行单元测试DialogFragment。此对话框有一个Scrollview. 当到达终点时,aViewSwitcher必须切换视图。

这是滚动监听器:

ViewSwitcher vs = getDialog().findViewById(R.id.vs);
scrollView.getViewTreeObserver()
     .addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
      @Override
      public void onScrollChanged() {
           if (scrollView.getChildAt(0).getBottom()
                <= (scrollView.getHeight() + scrollView.getScrollY())) {
                vs.setDisplayedChild(1);
            } else {
                vs.setDisplayedChild(0);
            }
       }
 });

测试设置方法:

@Before
public void setUp() throws Exception {
    activity = Robolectric
        .buildActivity(FragmentTestActivity.class)
        .create()
        .resume()
        .get();

    subject = MemberConsentModal.newInstance("long text");
    subject.show(activity.getSupportFragmentManager(), MemberConsentModal.TAG);
}

以及测试方法代码:

@Test
public void onScrolledToTopBottom_showOptionButtons() {
    final ScrollView scrollView = subject.getDialog().findViewById(R.id.member_consent_content);
    ViewSwitcher vs = subject.getDialog().findViewById(R.id.vs);

    scrollView.fullScroll(ScrollView.FOCUS_DOWN);

    assertThat(vs.getDisplayedChild()).isEqualTo(1);
}

调试时,我发现它addOnScrollChangedListener从未被调用,但是,当在模拟器上启动应用程序时,就像在物理设备上一样,它工作正常。如何使滚动视图在测试模式下滚动?

PS。我正在使用RobolectricandMockito进行单元测试

标签: androidunit-testingandroid-scrollviewviewswitcher

解决方案


推荐阅读