在刚开始接触 IdlingResource 的时候,对它抱有太多的幻想,以为可以肆无忌惮的处理异步的问题,使用之后才发现问题其实也不少,甚至还有一些明显的 bug。
在 IdlingResource 的说明文档里说可以总结成这样一句话 you have to use Idling Resources to inform Espresso of the app’s long-running operations.
。在这里我们并不能很直白的理解出 IdlingResource 只能用来等待 UI events
。也就是说在官方的设计里面,要使用 IdlingResource 来维持对应的后台操作,后面的紧跟着一条 UI 操作或验证,否则将不会生效。这样导致的结果是在一个后台操作完成以后是关闭当前页面的场景,根本无法测试。
如果这算是 Espresso 的特性的话,下面这个就是一个明显的 bug。
在进行 UI 测试的时候,有两个主线程需要区分一下,一个是主 App 运行的主线程([main,5,main]),另一个是 UI 测试跑的主线程([Instr: android.support.test.runner.AndroidJUnitRunner,5,main])。我们触发的UI事件都是在 App 主线程里面执行的,如果我们想要在 App 的线程里面做一些操作需要切换到对应的线程操作。如下面的代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
mActivityTestRule.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
LogUtils.d(TAG, "runOnUiThread..." + Thread.currentThread());
TaskApi.Companion.getMyTasks(0, 10000, "", new HSAPICallback<TaskListResult>() {
public void onRequestSuccess(TaskListResult data, int httpStatus,Boolean fromCache) {
super.onRequestSuccess(data, httpStatus, fromCache);
mTasks = data.getDatas();
}
});
}
});
|
原文转自:http://ohmerhe.com/2017/04/18/espresso_huge_ui_test/