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

时间:2017-12-28 12:48:53

标签: android android-recyclerview android-espresso

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

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

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

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

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

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

1 个答案:

答案 0 :(得分: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)));

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

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

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

的RuntimeException
  

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