代码之家  ›  专栏  ›  技术社区  ›  Nick Cardoso

我可以在没有活动的情况下测试浓缩咖啡中的RecyclerView吗?

  •  2
  • Nick Cardoso  · 技术社区  · 8 年前

    测试 -我有一个意式浓缩咖啡测试套件,旨在使用RecyclerView适配器测试一些复杂的决策。

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

    问题所在 -我在没有特定活动的情况下单独测试这一点,这意味着以下代码永远不会通过,因为RecyclerView从不显示其子级:

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

    我假设我可以通过使用RecyclerView创建一个空活动和一个空布局来实现这一点,但我希望避免创建这样的垃圾类。

    问题是 -有没有可能让RecyclerView像这样单独运行?Espresso是否有一些根视图,我可以将其连接到?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Nick Cardoso    8 年前

    如所述 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或类似函数来启动活动?