android - 滚动视图的滚动操作在单元测试时不起作用
问题描述
我有以下问题。我正在为 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。我正在使用Robolectric
andMockito
进行单元测试。
解决方案
推荐阅读
- android - 使用 Flutter 在 Android 上锁定屏幕(类似于按下电源按钮)
- c# - 调用 C# 用 C/C++ 开发的 DLL?
- google-apps-script - 通过 API/Apps 脚本获取文件的过去权限
- php - 带有 CURLFile 的 CURL 适用于 PHP7.3 但不适用于 PHP7.4
- java - 如何创建密码以防止用户发现密码并在桌面应用程序 gui 中更改密码
- html - CSS:更改特定列中文本的颜色-但不在该列标题上?
- java - eXistDB 在 5.2.0 版本中没有 httpclient?
- sql - 查找重复预订
- php - 如何在我的 ForEach 循环中获取 Category + 子项
- java - 在 Java 中生成文本文件时应该使用“\r\n”还是“\n”?