bcd*_*s72 6 android unit-testing ui-thread
场景:
我正在尝试对我的应用程序的onClick处理程序进行单元测试.Onclick对REST API进行简单搜索,返回结果并更新UI.
细节:
Onclick执行AsyncTask,doInBackground查询REST API并返回结果.onPostExecute获取结果并使用数据将新的ListAdapter分配给ListView.
问题:
测试运行器不会调用onPostExecute,因为它位于同一UI线程上并阻止调用.有几种模式可以解决这个问题.但是,如果我将AsyncTask放在Runnable中并使用LatchCountdown等待结果,我会得到CalledFromWrongThread异常.
是否有一个很好的解决方案来单元测试执行UI更新的AsyncTask?还是我可以实现的更可测试的设计?
好吧,所以我想出的解决方案是这样的:
1.) 为前置和后置事件定义监听器接口。
2.) 在 Activity
2.) 上实现侦听器。 定义一个任务包装类,该类接受侦听器并且具有在“exec”上调用的内部 AsyncTask。
3.) 内部 AsyncTask 在 onPreExecute 和 onPostExecute 上通知侦听器
4.) 收到通知后,Activity 会更新其 UI。
对于活动中的测试:
1.) 通过继承来创建包装类的串行版本,然后重写 exec 方法以按顺序执行:
- 通知侦听器任务已启动。
- 执行任务。
- 通知监听者任务已完成。
用于测试任务的异步版本。
1.) 在单元测试方法中使用 CountdownLatch 和 Runnable。由于不需要任何 UI 更新,因此不会出现任何 WrongThreadExceptions。
| 归档时间: |
|
| 查看次数: |
1354 次 |
| 最近记录: |