SuperAPI AI 工具集

dart-matcher-best-practices

测试与质量

查看项目

更新于 10-15 23:45

技能介绍

用途:该技能用于在 Dart 测试中编写基于 expect 与 package:matcher 的断言,帮助把手工检查迁移为更清晰的匹配器,并排查难以理解的测试失败。

主要能力:集合方面推荐 hasLength(n)、isEmpty、isNotEmpty、contains、unorderedEquals、containsPair,替代对 .length、.isEmpty、.contains 等布尔值的直接比较;类型检查推荐 isA<T>() 用于内联断言,TypeMatcher<T> 用于定义可复用的顶层匹配器,并可用 .having() 链式检查对象属性,闭包参数应使用有意义的名称。异步方面使用 completion(matcher) 与 throwsA(matcher),并配合 await expectLater 保证时序;异常测试推荐用 throwsA 替代 try/catch 加 fail(),内置匹配器包括 throwsArgumentError、throwsStateError、throwsRangeError、throwsFormatException、throwsNoSuchMethodError、throwsUnsupportedError。

使用方式:可通过正则搜索定位可优化模式,例如 expect([^,]+.length,\s*、expect([^,]+.isEmpty,\s*(true|equals(true))、expect([^,]+[.],\s 等,再替换为对应匹配器。

限制与不适用场景:属性名为 .length 但属于非集合类(如向量模长、缓冲区时长、线段距离)时不要用 hasLength;测试任意领域布尔属性时不要臆造匹配器;项目已采用 package:checks 时不要回退到 matcher;断言已使用声明式匹配器时不做修改。相关技能为 dart-test-fundamentals。