解读Android官方MVP项目单元测试

发表于:2016-06-29来源:简书作者:geniusmart点击数: 标签:单元测试
Google在3月份推出了一个项目,用来介绍Android MVP架构的各种组合,可以认为是官方在这方面的最佳实践。令人称道的是除了MVP本身之外,这些工程配备了极其完善的单元测试用例,学习

 


Google在3月份推出了一个项目,用来介绍Android MVP架构的各种组合,可以认为是官方在这方面的最佳实践。令人称道的是除了MVP本身之外,这些工程配备了极其完善的单元测试用例,学习价值极高。本文着重针对todo-mvp的单元测试进行解读。官方MVP项目的Github地址是:
https://github.com/googlesamples/android-architecture

写在前面

  1. 关于MVP
    关于MVP的介绍很多,这不是本文的重点,这里列举近期一些比较好的文章。
  2. 关于单元测试
    对于单元测试,需要预先了解以下内容
    • Android Studio的test和AndroidTest
    • AndroidJUnitRunner:一个兼容Junit4的Andriod单元测试框架
    • Mockito:单元测试利器
    • Espresso:支持UI测试的单元测试框架
  3. 关于todo-mvp的功能

功能介绍


简而言之,这个工程包含了三个模块:待办事项列表模块,待办事项详情模块,统计模块。

MVP各层的单元测试选型

在该项目中,MVP各层所使用的单元测试框架如下图所示:


官方todo-mvp的UT选型
  • P层:不需要任何Android环境,因此使用Junit测试即可
  • V层:使用Google强大的Espresso进行UI的测试
  • M层:涉及到数据库相关操作,因此需要依赖Android环境,使用AndroidJUnitRunner进行测试

在此处,我们先大致了解一下MVP各层的UT选型,然后通过一个例子,看看各层之间如何配合测试,最后再对各层UT选型的原因进行分析,从而理解整体测试架构。

接下来我们以TO-DO List页面(TasksActivity/TaskFragment)中加载任务列表功能为例,此场景的功能界面如下图所示:


待办任务列表

Presenter层的测试

在这个功能里,Presenter只做了一件事情,就是loadTask(),时序图如下所示:


loadTask的时序图]

从时序图上看,loadTask执行的逻辑是,1.调用View层开启进度条->2.从Model层获取待办任务列表->3.Model层以回调函数的形式返回数据->4.调用View层关闭进度条->5.调用View层显示任务列表。这5个步骤里,每个步骤的逻辑是否准确是View层和Model层该测试的事情,对于Presenter层来讲,他的测试任务是确保这5个步骤如期调用。为了达成此目的,我们会采用

原文转自:http://www.jianshu.com/p/cf446be43ae8