我有一个基础 RecyclerViewAdapter
我想独立于我的各种子类进行测试。我如何孤立地做到这一点?我尝试在我的测试类中创建一个精简的 Vanilla Activity,并使用 ActivityTestRule
启动它,但不幸的是,测试框架似乎想要启动实际应用程序而不是测试应用程序中的 Activity 。我不想为此求助于 Robolectric,因为我们的团队致力于使用 Espresso 进行仪器测试。我真正想要测试的是适配器中各种 notify
方法的行为,因为我看到了崩溃
android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition
最佳答案
我最终通过在 debug
文件夹中添加一个虚拟 Activity 来解决这个问题,然后在我的测试代码中手动将一个 RecyclerView
添加到 Activity 中,然后将适配器设置为我想单独测试它。当应用编译 list 合并时,将合并在调试文件夹中的 AndroidManifest.xml
中声明的所有 Activity 。
这是我的测试设置代码:
@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:
<activity android:name="com.example.DummyActivity" />
虚拟 Activity 很简单:
// Dummy Activity for testing
public class DummyActivity extends Activity {
}
关于android - 测试 RecyclerView 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42079391/