用途:在 Dart 或 Flutter 项目中执行测试最佳实践,适用于用户提出“enforce test best practices”之类请求,或在创建、修改测试文件时使用。其目标是把手写断言重构为 package:test 的声明式匹配器写法。
工作流:先搜索候选代码,再分析是否违反最佳实践,随后重构为推荐匹配器,最后运行 dart test 验证无回归。
主要能力与推荐写法:
- 集合:优先用 expect(list, hasLength(n)) 而非 expect(list.length, n);优先用 isEmpty、isNotEmpty 而非 list.isEmpty == true 之类布尔比较;适用于 Iterable、Map、String。
- 声明式验证:优先用 expect(list, everyElement(matcher)) 替代手动循环加断言。
- 列表相等:优先用 expect(actualList, expectedList) 替代按索引逐项检查,package:test 可提供可读差异。
- 映射:优先用 expect(map, containsPair(key, value)) 而非 expect(map[key], value);验证键缺失时用 expect(map, isNot(contains(key)));已知完整映射时用 expect(map, {'k': 'v'}) 做严格相等。
- 类型与对象:优先用 expect(obj, isA<T>()) 而非 expect(obj is T, isTrue);多个属性检查可在 isA<T> 上链式调用 having。
限制与注意:应用集合匹配器前需确认对象严格为 Iterable/Map,某些自定义类如 PriorityQueue 虽有 .length 但并非 Iterable;除非明确要求,不要迁移到 package:checks,本技能聚焦 package:test 匹配器;重构不得改变断言严格程度。搜索可用 grep -r ".length,\s*equals(" test/ 等命令定位候选,手动循环需人工审查。