Google官方Android MVP架构Demo之单元测试
Google在2016年推出了官方的Android MVP架构Demo,与此Demo相关的分析在网上有很多,但是关于单元测试的分析不是很多,而单元测试是我认为每一个应用开发中不可或缺的一部分,它不仅可以检测我们代码的健壮性,还能约束我们的开发习惯,让我们依循规范进行开发。
Android环境下的单元测试,与传统意义上的单元测试存在差异,传统意义上的单元测试一般不依赖设备环境,仅仅通过开发工具便能完成大部分测试。而在Android中,因为开发工具并不能模拟真实设备环境,因此,导致很多单元测试无法进行,这也是很多开发者头疼的问题。与其百思不得解,不如一起看一下官方是如何进行单元测试的。
关于MVP架构
MVP架构已经推出很多年了,现在已经非常普及了,我在这里就不过多介绍,简单的说,它分为以下三个层次:
- Model:数据模型层,主要用来数据处理,获取数据;
- View:显示界面元素,和用户进行界面交互;
- Presenter: 是Model和View沟通的桥梁,不关心具体的View显示和Model的数据处理。View层中所有的逻辑操作都通过Presenter去通知Model层去完成,Model中获取的数据通过Presenter层去通知View层显示。
MVP架构最大的好处,就是把传统MVC架构中View层和Control层的复杂关系完全解耦,View层只关心界面显示相关的工作即可,Model层仅获取数据,处理逻辑运算即可,各司其职,而不用关心其他工作。
关于单元测试工具
MVP Demo中所使用的单元测试工具有以下几种:
1. Junit
Android自带的单元测试框架,主要用来测试不依赖Android环境,主要是用来测试逻辑操作的Presenter层和Model层。
2. Mockito
一个用来模拟数据的开源框。配合Junit框架测试Presenter的逻辑操作,用来模拟Model层的数据,目的是不让Model层的因缺乏真实数据阻塞测试。
3. AndroidJunitRunner
此框架也是Android自带的测试框架,包含了Android相关的环境。此框架配合Espresso用来测试View层的显示是否正确,需要在真机上运行。
4. Espresso
一个简洁高效的UI测试框架,可以用来很方便的模拟用户的真实操作,通用也需要在真机上运行。
以上基本上就是Demo中使用的主要测试框架,若不了解的,请先学习一下相关基础知识。
功能界面分析与测试
Demo中包含很多功能点,由于仅仅只是分析在MVP框架中单元测试是如何进行的,因此,这里仅仅选用某几个单独的功能点进行分析。
功能界面分析
在开始介绍单元测试之前,我们先介绍主页TasksActivity
和TasksFragment
相关的功能实现逻辑,以便更好的理解单元测试的使用。
首先,我们介绍一下加载任务列表此功能的逻辑。当用户点击加载任务列表时,各个模块的功能分别为: