测试 - 我有一个Espresso测试套件,旨在使用RecyclerView适配器测试一些复杂的决策。
对于一个测试,我打算创建一个RecyclerView,将测试中的适配器传递给它,然后确定存在正确数量的子节点,并且可以看到正确的元素。
问题 - 我在没有特定Activity的情况下单独测试它,这意味着以下代码永远不会通过,因为RecyclerView永远不会覆盖它的子代:
RecyclerView rv = new RecyclerView(InstrumentationRegistry.getTargetContext());
rv.setAdapter(adap);
assertThat(rv.getChildCount(), is(greaterThan(0)));
我假设我可以通过使用RecyclerView创建一个空活动和一个空布局来完成这项工作,但我想避免创建类似垃圾类。
问题 - 是否可以让RecyclerView像这样单独运行? Espresso有一些我可以访问的根视图吗?
答案 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或类似方法启动活动?