【发布时间】:2017-10-09 10:55:33
【问题描述】:
我正在尝试使用 AndroidJunit4 测试 RecyclerView,这是我的测试代码:
@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));
}
这是我在 Activity 中的 displayProducts() 代码:
@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);
}
}
它给出的错误如下:
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)
请帮忙看看我的代码有什么问题?
【问题讨论】:
-
如何设置
mAdapter? -
动画是你在 ui 测试中的敌人,每个进度条、自定义动画或在非异步线程池上完成的任何工作都不会在 espresso 中注册,它只会通过其他断言运行,因为它认为没有什么可以等待的。还尝试编写您注入的测试并在 setup 和 teardown 中设置数据,然后您的活动将在构建期间拥有它。你有没有在 displayProducts() 之后调用 notifydataset 改变?
-
mAdapter 从何而来?我认为您正在检查错误的适配器
标签: android unit-testing android-adapter android-junit