Адаптер Android RecyclerView дает нулевое значение при модульном тестировании
Я пытаюсь протестировать RecyclerView с AndroidJunit4, это мой тестовый код:
package com.kaushik.myredmart.ui;
// all includes
@RunWith(AndroidJUnit4.class)
public class ProductListActivityTest {
@Rule
public ActivityTestRule<ProductListActivity> rule = new ActivityTestRule<>(ProductListActivity.class);
@Test
public void ensureListViewIsPresent() throws Exception {
ProductListActivity activity = rule.getActivity();
View viewByIdw = activity.findViewById(R.id.productListView);
assertThat(viewByIdw,notNullValue());
assertThat(viewByIdw, instanceOf(RecyclerView.class));
RecyclerView productRecyclerView = (RecyclerView) viewByIdw;
RecyclerView.Adapter adapter = productRecyclerView.getAdapter();
assertThat(adapter, instanceOf(ProductAdapter.class));
}
}
Я столкнулся с проблемой, чтобы проверить адаптер. Хотя productRecyclerView проходит не нулевой тест, а экземпляр RecyclerView, в последней строке есть следующая ошибка:
java.lang.AssertionError:
Expected: an instance of com.kaushik.myredmart.adapter.ProductAdapter
but: null
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
at org.junit.Assert.assertThat(Assert.java:956)
at org.junit.Assert.assertThat(Assert.java:923)
at com.kaushik.myredmart.ui.ProductListActivityTest.ensureListViewIsPresent(ProductListActivityTest.java:45)
В чем проблема в коде?
1 ответ
Судя по этой строке:
Ожидается: экземпляр com.kaushik.myredmart.adapter.ProductAdapter, но: null
Можно сделать вывод, что это:
RecyclerView.Adapter adapter = productRecyclerView.getAdapter();
возвращается null
что может случиться, когда там не было выполнено productRecyclerView.setAdapter(adapter)
,
Убедитесь, что вы правильно настраиваете адаптер в обратных вызовах жизненного цикла активности (т.е. в onCreate()
). Мне кажется, вы создаете и настраиваете адаптер после некоторого действия / обратного вызова.
Как упомянуто @azizbekian, вы должны установить адаптер в onCreate() действия.