用途:在 Dart 或 Flutter 项目中,把使用 package:matcher 的 expect 等断言迁移为 package:checks 的等价写法,适用于用户要求迁移到 package:checks(或简称 checks)的场景。
主要能力与工作流:先分析,用 grep 找出使用 expect 或 package:matcher 的文件,并检查自定义 matcher(可能需要手工迁移);确认 dev_dependencies 含 checks,缺失时执行 dart pub add --dev checks;用命令发现候选,如 grep -r "expect(" test/、grep -r "expectLater(" test/、grep -r "isTrue" test/;替换时添加 import 'package:checks/checks.dart'; 并按常见模式改写,例如 expect(a, equals(b)) 改为 check(a).equals(b),expect(a, isTrue) 改为 check(a).isTrue(),expect(list, hasLength(n)) 改为 check(list).length.equals(n),expect(map, equals(otherMap)) 改为 check(map).deepEquals(otherMap)。最后一步是在所有 expect 调用替换完成后,才把 import 'package:test/test.dart'; 改为 import 'package:test/scaffolding.dart';,以保证增量推进。验证阶段确保代码静态分析干净、测试通过;若可用,优先使用 Dart MCP server 而非 dart 命令行。
异步与 Future 是关键点:check(() => asyncFunc()).throws<T>() 会产生假阳性,因为闭包返回 Future 被视为正常完成;应写成 await check(asyncFunc()).throws<T>();许多异步检查方法返回 Future<void>,不能直接链式调用,需用级联或回调,例如 await check(future).throws<Error>((it) => it.has((e) => e.message, 'message').equals('foo'));。同一主题多断言可用级联,如 check(it)..isGreaterThan(10)..isLessThan(20);。
限制:范围仅限修改 test/ 目录与 pubspec.yaml;迁移后出现测试失败且无法立即修复时,应回退该处改动;package:checks 对类型比 matcher 更严格,可能需要显式 as T 转换或在链中加入 isA<T>()。资料未提供其他平台、收费或价格信息。