gpt4 book ai didi

Android Espresso 测试 SwipeRefreshLayout OnRefresh 未在 swipeDown 上触发

转载 作者:行者123 更新时间:2023-12-02 00:54:26 25 4
gpt4 key购买 nike

作为集成测试的一部分,我正在尝试为 pull to refresh 编写简单的测试。我正在使用最新的 androidX 测试组件和 Robolectric。我正在测试一个我正在注入(inject)模拟演示者的孤立 fragment 。

XML 布局部分

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerTasks"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

fragment 部分
binding.refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
presenter.onRefresh();
}
});

测试:
onView(withId(R.id.refreshLayout)).perform(swipeDown());
verify(presenter).onRefresh();

但测试没有通过,消息:

Wanted but not invoked: presenter.onRefresh();



该应用程序运行良好,并拉动刷新调用presenter.onRefresh()。我还对测试进行了调试,并且调用了 setOnRefreshListener 并且它不是空值。如果我使用自定义匹配器进行测试以检查 SwipeRefreshLayout 测试通过的状态。
onView(withId(R.id.refreshLayout)).check(matches(isRefreshing()));

最佳答案

上周末我做了一些小调查,因为我遇到了同样的问题,这让我很困扰。我还与设备上发生的情况进行了比较以发现差异。

内部 androidx.swiperefreshlayout.widget.SwipeRefreshLayout有一个 mRefreshListener将在 onAnimationEnd 时运行叫做。 AnimationEnd然后会触发OnRefreshListener.onRefresh方法。

该动画监听器( mRefreshListener )被传递给 mCircleView (CircleImageView)并调用圆形动画开始。

在设备上查看 draw方法被调用它会调用 applyLegacyAnimation该方法将依次调用 AnimationStart方法。在 AnimationEnd, onRefresh方法将被调用。

在 Robolectric 上 View 的绘制方法永远不会被调用,因为这些项目实际上并没有被绘制。这意味着动画将永远不会运行,因此 onRefresh 也不会运行。方法。

我的结论是,使用当前版本的 Robolectric 无法验证 onRefresh由于实现限制而调用。似乎计划在 future 进行逼真的渲染。

关于Android Espresso 测试 SwipeRefreshLayout OnRefresh 未在 swipeDown 上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55517269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com