其他
Dart/Flutter 新增逻辑或修 bug 时用…
在 Dart/Flutter 项目中为函数、方法、类编写和维护单元测试,确保新逻辑正确并避免回归。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
Dart/Flutter 新增逻辑或修 特定
解决思路
- 让测试文件结构镜像 lib 目录:例如 lib/src/utils.dart 对应 test/src/utils_test.dart,保持可预测。
- 把所有测试代码放在包根目录的 test 目录下。
- 所有测试文件名以 _test.dart 结尾。
- 如果写集成测试,把它们放在包根目录的 integration_test 目录下。
- Dart 应用统一使用 package:test 作为标准测试库。
- 导入 package:test/test.dart;Flutter 项目导入 package:flutter_test/flutter_test.dart。
- 使用 group() 对相关测试分组,提供共享上下文。
- 使用 test() 定义单个测试用例。
- 使用 expect() 配合 matcher 验证结果,例如 equals()、isTrue、throwsA()。
- 异步测试使用标准 async/await 语法,测试运行器会自动等待 Future 完成。
- 使用 setUp() 和 tearDown() 回调管理测试的初始化和清理。
- 如果被测代码依赖依赖注入,配合 package:test 使用 package:mockito 生成 mock 对象、配置固定场景并验证交互。
- 纯 Dart 项目用 dart test 执行测试。
- Flutter 项目用 flutter test 执行测试。
- 运行集成测试时显式指定目录路径,因为默认 runner 会忽略它:dart test integration_test 或 flutter test integration_test。
- 在 test/ 目录创建测试文件,并确保使用 _test.dart 后缀。
- 在测试文件中导入 package:test/test.dart 和被测目标库。
- 定义 main() 函数。
- 在 main() 中用 setUp() 初始化共享资源或 mock。
- 按功能用 group() 组织,并在其中用 test() 编写测试用例。
- 用合适的 CLI 命令执行测试套件。
- 进入反馈循环:运行测试 -> 查看失败堆栈跟踪 -> 修复实现或断言 -> 重新运行直到通过。
- 使用 mockito 时,通过 @GenerateNiceMocks([MockSpec<ApiClient>()]) 声明 mock,并用 dart run build_runner build 生成 mock 代码。
- 配置 mock:用 when(mockApiClient.get('/data')).thenAnswer((_) async => ...) 固定异步返回值。
- 执行被测系统后,用 expect 验证结果,并用 verify(mockApiClient.get('/data')).called(1) 验证交互发生次数。
适用边界 · 注意事项
- 不适用于非 Dart/Flutter 项目;该做法依赖 package:test、dart test 或 flutter test。
- 集成测试不能只放在 test/ 或用默认 dart test/flutter test 直接运行,必须在 integration_test 目录并显式指定路径。
- 纯 UI 视觉检查、真机交互或端到端流程不应只靠单元测试覆盖,需要配合 Widget/集成测试。