我可以在没有活动的情况下在Espresso中测试RecyclerView吗?

问题描述 投票:0回答:1

测试 - 我有一个Espresso测试套件,旨在使用RecyclerView适配器测试一些复杂的决策。

对于一个测试,我打算创建一个RecyclerView,将其传递给测试中的适配器,然后确定存在正确数量的子节点,并且可以看到正确的元素。

问题 - 我在没有特定Activity的情况下单独测试它,这意味着以下代码永远不会通过,因为RecyclerView永远不会列出它的子代:

RecyclerView rv = new RecyclerView(InstrumentationRegistry.getTargetContext());
rv.setAdapter(adap);
assertThat(rv.getChildCount(), is(greaterThan(0)));

我假设我可以通过使用RecyclerView创建一个空活动和一个空布局来完成这项工作,但我想避免创建这样的垃圾类。

问题 - 是否有可能让RecyclerView像这样单独运行? Espresso有一些我可以访问的根视图来附加它吗?

android android-recyclerview android-espresso
1个回答
0
投票

正如CommonsWare所指出的那样,确保RecyclerView准备好在没有活动的情况下进行测试的方法是自己强制布局。

RecyclerView rv = new RecyclerView(InstrumentationRegistry.getTargetContext());
rv.setLayoutManager(new LinearLayoutManager(InstrumentationRegistry.getTargetContext()));
rv.setAdapter(adapter);
rv.measure(View.MeasureSpec.AT_MOST, View.MeasureSpec.AT_MOST);
rv.layout(0,0, 800, 480); //arbitrary sizes

以这种方式创建视图后,子计数将不再为零

assertThat(rv.getChildCount(), is(greaterThan(0)));

在没有Activity的情况下测试RecyclerView的一个警告是你无法执行操作。

onView(...).perform(click());

如果没有活动,此代码将抛出带有消息的RuntimeException

找不到任何活动。您是否忘记通过调用getActivity()或startActivitySync或类似方法启动活动?

© www.soinside.com 2019 - 2024. All rights reserved.