上面有一个活动和一个按钮。任务是通过白盒测试以获得活动后果行为的影响"按钮CLICK - >按钮GONE - >活动暂停 - >活动简历"按钮可见性状态。
朴素的实现会导致活动状态不一致,从而导致错误的测试输出:
// worker thread
TouchUtils.clickView(this, mButton);
...
// ui thread
instrumentation.callActivityOnStop(mActivity);
instrumentation.callActivityOnResume(mActivity);
assertTrue(View.GONE == mButton.getVisibility());
两个glympse方法没有成功:
1)在TouchUtils.clickView()
执行后为主线程添加睡眠但是并没有完全解决问题,但会对经验UI超时持续时间产生额外的依赖。
2)通过{strong> AsyncTask 中的onPostExecute()
同步触摸事件和后续活动生命周期事件会导致测试无法预测地失败。
是否存在任何规范或至少可行的解决方案,一般用于工人ui同步或专为Android Test框架设计?
答案 0 :(得分:0)
必须使用 Instrumentation.class 中的runOnMainSync()
来通过Android Test Framework工具同步UI和工作线程事件:
// worker thread
TouchUtils.clickView(this, mButton);
instrumentation.runOnMainSync(new Runnable() {
@Override
public void run() {
instrumentation.callActivityOnStop(mActivity);
instrumentation.callActivityOnResume(mActivity);
assertTrue(View.GONE == mButton.getVisibility());
}
});
但是,如果有任何其他建议或一般(不是与Android测试框架相关)指南的答案,则表示赞赏。
注意:官方best practices for testing中介绍了与主要线程同步的更多特殊工具。