Ich versuche RecyclerView mit AndroidJunit4 zu testen, ist es mein Testcode:Android RecyclerView Adapter Artikelanzahl wird 0 auf Unit-Tests Rückkehr
@Rule
public ActivityTestRule<ProductListActivity> rule = new ActivityTestRule<>(ProductListActivity.class);
............................
..........................
@Test
public void ensureDataIsLoadingOnSuccess() throws Exception {
ProductListActivity activity = rule.getActivity();
...........................
............
activity.runOnUiThread(new Runnable() {
public void run() {
activity.displayProducts(asList(product1, product2), 0);
}
});
assertEquals(2, mAdapter.getItemCount());
assertThat(((ProductAdapter) mAdapter).getItemAtPosition(0),sameInstance(product1));
assertThat(((ProductAdapter) mAdapter).getItemAtPosition(1),sameInstance(product2));
}
Hier ist mein Code für displayProducts() in Aktivität:
@Override
public void displayProducts(List<Product> products, Integer pageNo) {
progressBar.setVisibility(View.GONE);
if (pageNo == 0 && products.size() == 0) {
noProductTextView.setVisibility(View.VISIBLE);
} else {
mProductAdapter.addProduct(products);
noProductTextView.setVisibility(View.GONE);
productListView.setVisibility(View.VISIBLE);
}
}
Es gibt Fehler wie:
junit.framework.AssertionFailedError: expected:<2> but was:<0>
at junit.framework.Assert.fail(Assert.java:50)
at junit.framework.Assert.failNotEquals(Assert.java:287)
at junit.framework.Assert.assertEquals(Assert.java:67)
at junit.framework.Assert.assertEquals(Assert.java:199)
at junit.framework.Assert.assertEquals(Assert.java:205)
at com.kaushik.myredmart.ui.ProductListActivityTest.ensureDataIsLoadingOnSuccess(ProductListActivityTest.java:94)
Bitte helfen Sie, was das Problem in meinem Code ist?
Wie richte ich 'mAdapter' ein? – tynn
Animationen sind dein Feind beim Testen, jeder Fortschrittsbalken, benutzerdefinierte Animationen oder jede Arbeit, die an einem nicht-asynchronen Thread-Pool ausgeführt wird, werden nicht bei Espresso registriert und es läuft einfach durch die anderen Behauptungen, weil es denkt, dass es nichts zu warten gibt. Versuchen Sie auch, Ihre Tests zu schreiben, die Sie injizieren und setzen Sie die Daten in Setup und Teardown, dann wird Ihre Aktivität während des Aufbaus haben. Haben Sie notifydataset nach displayProducts() geändert? – originx
Woher kommt mAdapter? Ich denke, Sie überprüfen den falschen Adapter – Tudor