之前已经讲解了 Flutter 所有基础的知识点,本课时介绍如何保证组件代码的质量,以此来确保我们在代码开发过程中或者在重构过程中的代码质量。
单元测试
单元测试的概念是针对程序中最小单位来进行校验的工作,在 Flutter 中最小的单位是组件。由于我们扩展了一些模块比如 Model(Provider)、Struct(数据结构部分),因此这里也需要介绍下这两部分的单元测试。
目录结构
为了保持一致性,我们在 test 单元测试目录,创建与项目结构目录一致的结构,如图 1 所示。
图 1 单元测试目录结构
单元测试目录结构下的测试文件命名也是按照原组件命名方式,但是需要在组件命名后面增加 test 后缀。例如,我们需要对 article_comments.dart 文件进行单元测试,根据规则将其命名为 article_comments_test.dart。
前期准备
首先我们需要在 pubspec.yaml 中增加相应的 flutter_test 第三库,一般项目初始化后,会自动在 dev_dependencies 中引入,最后执行 flutter pub get 更新本地第三库即可。目录结构目前还是需要手动创建,在下一课时,我会在脚手架中自动化创建。
Struct 的单元测试
Struct 的目的是保证数据结构的安全,避免因为动态数据结构而引发客户端的 Crash 问题,因此做好数据结构的单元测试非常必要。Struct 的结构比较简单,只有一个构造函数,在构造函数中存在必须和可选参数,单元测试部分主要是验证这个构造函数即可。
在上一课时中,我们创建了三个 Struct ,这里着重介绍较为复杂的 comment_info_struct.dart 的测试用例写法,代码如下。
import 'package:flutter_test/flutter_test.dart';
import 'package:two_you/util/struct/comment_info_struct.dart';
import 'package:two_you/util/struct/user_info_struct.dart';
void main() {
final UserInfoStruct userInfo = UserInfoStruct('test', 'http://test.com');
test('test-userinfo', () {
final CommentInfoStruct commentInfo =
CommentInfoStruct(userInfo, 'comment test');
expect(commentInfo.comment == 'comment test', true);
expect(commentInfo.userInfo.nickname == 'test', true);
expect(commentInfo.userInfo.headerImage, '