使用 Espresso 实现完整覆盖的功能测试(6)

发表于:2017-04-20来源:Ohmer作者:Ohmer点击数: 标签:功能测试Espresso
Idling 后面需要有 onView 的阻塞操作才能产生效果 在刚开始接触 IdlingResource 的时候,对它抱有太多的幻想,以为可以肆无忌惮的处理异步的问题,使用之后

Idling 后面需要有 onView 的阻塞操作才能产生效果

在刚开始接触 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。

不同线程 IdlingResource 的 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/

...