Flutter中TDD的优势
对单元测试非常好的支持是选择Flutter的一个重要原因。因为这是保证TDD流畅进行的重要基础。
Flutter中单元测试的优势主要有两个方面:
1、运行速度快。
Flutter的测试代码运行速度非常快,基本是几秒最慢十几秒就开始运行。我们TDD中需要非常频繁运行测试代码,因此在Android原生上每次测试先编译3分钟的情况对TDD使用是非常巨大的阻碍。而Flutter在这方面提供了非常好的体验。
2、优秀的widget test。
Flutter的widget test为我们提供了可以在PC上测试UI逻辑的解决方案。避免每次需要连接手机测试,为TDD中覆盖UI逻辑提供了有力支撑。
Flutter具体实施TDD
这里就不具体讲怎么使用Flutter的单元测试功能了,网上有很多教程。我们来聊聊哪些内容是需要测试的,如何测试。
先来看架构,以页面为视角的话大体如下。每个页面有UI部分,Bloc承载业务逻辑,Bloc可能会调用公共模块的相关功能。
![12ccd19b51e989fcc9126e514c37d355.png](https://img-blog.csdnimg.cn/img_convert/12ccd19b51e989fcc9126e514c37d355.png)
那么这里面哪些部分需要通过TDD的测试驱动出来呢?
我们目前使用如下原则:
- UI部分
- UI逻辑要测试(如点击后的动作,页面跳转,数据更新后相关内容是否展示等)
- 布局不测试(如控件的相对位置,控件大小等)
- Bloc部分
- Bloc是业务逻辑的核心,原则上都要测试
- 基础模块
- 基础模块通常会和外部接口或第三方库交互因此部分测试
- 我们自己的代码逻辑要测试
- 对接口、数据库、第三方库等的调用及返回数据使用mock工具模拟
- 这里有一点要注意:外部调用时传入的参数是要测试的
汇总如下
![9416f5254c959aaa1a09f4e4167d71e1.png](https://img-blog.csdnimg.cn/img_convert/9416f5254c959aaa1a09f4e4167d71e1.png)
总结
Flutter中实行TDD的核心思想是尽可能多的代码由测试代码驱动出来。Flutter提供的widget test功能为UI逻辑部分的代码由测试驱动出来提供了有力保障。现有的实施原则保证了我们自己的代码中除了UI布局和外部模块调用外,所有的代码都由单元测试驱动出来的。