【问题标题】:Testing RecyclerView Adapters测试 RecyclerView 适配器
【发布时间】:2017-02-06 23:53:15
【问题描述】:

我有一个基础RecyclerViewAdapter 我想独立于我的各种子类进行测试。我如何孤立地做到这一点?我尝试在我的测试类中创建一个精简的香草活动,并使用ActivityTestRule 启动它,但不幸的是,测试框架似乎想要启动实际应用程序中的活动,而不是测试应用程序。我不想为此使用 Robolectric,因为我们的团队致力于使用 Espresso 进行仪器测试。我真正想测试的是适配器中各种notify 方法的行为,因为我看到了崩溃

android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition

【问题讨论】:

  • 我认为您需要提供一些代码。目前的形式太模糊了(至少对我来说)。
  • 看我的回答。希望对您有所帮助。

标签: android unit-testing android-espresso


【解决方案1】:

我最终通过在debug 文件夹中添加一个虚拟活动来解决此问题,然后在我的测试代码中手动将RecyclerView 添加到活动中,然后在其上设置我想单独测试的适配器。当应用程序编译时,清单合并将合并在调试文件夹中的AndroidManifest.xml 中声明的所有活动。

这是我的测试设置代码:

@RunWith(AndroidJUnit4.class)
public class MyRecyclerViewAdapterTest {

    private MyRecyclerViewAdapter adapter;
    private RecyclerView recyclerView;

    @Rule
    public ActivityTestRule<DummyActivity> activityTestRule =
        new ActivityTestRule<>(DummyActivity.class, true, false);

    @Rule
    public UiThreadTestRule uiThreadTestRule = new UiThreadTestRule();

    @Before
    public void setup() throws Throwable {
        final DummyActivity activity = activityTestRule.launchActivity(null);

        uiThreadTestRule.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                adapter = new MyRecyclerViewAdapter(activity);
                recyclerView = new RecyclerView(activity);
                recyclerView.setId(R.id.recycler_view);
                activity.setContentView(recyclerView);
                recyclerView.setLayoutManager(new LinearLayoutManager(activity));
                recyclerView.setAdapter(adapter);
            }
        });
    }
}

并在/src/debug/AndroidManifest.xml 中声明了虚拟活动:

<activity android:name="com.example.DummyActivity" />

虚拟 Activity 很简单:

// Dummy Activity for testing
public class DummyActivity extends Activity {
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多