SuperAPI AI 工具集

vgv-testing

测试与质量

查看项目

更新于 10-16 04:36

技能介绍

vgv-testing 是 Dart 与 Flutter 项目的测试最佳实践集合,适用于单元测试、Widget 测试和 golden 文件测试,主要依赖 package:test、package:flutter_test、package:mocktail 与 package:bloc_test。

用途 该技能用于统一 Dart/Flutter 项目的测试写法,强调测试行为而非实现细节,并通过命名、分组、文件组织等约定提升可读性与可维护性。

核心标准 测试名称需描述行为,避免“works”“renders”这类模糊表述;group/test 层级应能连读成自然语句,顶层 group 用类名,嵌套 group 用方法名,test 描述行为。类型引用使用字符串插值(如 'returns $User')以便重命名自动传播。每个文件使用私有 Mock(class _MockX extends Mock implements X {})。所有 setUp/tearDown 必须放在 group 内,可变对象用 late 声明并在 setUp 中赋值,禁止测试间共享可变状态。统一使用 package:mocktail,不使用 package:mockito。测试标签使用抽象类 TestTag 的静态常量,不传裸字符串。Widget 测试关注功能结果,静态视觉属性交给 golden 测试。Widget 通过 test/helpers/pump_app.dart 中的共享 helper 包装,不内联 pumpWidget(MaterialApp(...))。所有 golden 测试需打上 TestTag.golden 标签。当项目不在工作区根目录时(如 monorepo 的 mobile/ 子目录),调用测试 MCP 工具需传 directory 参数。

测试结构 测试文件以 _test.dart 结尾,全部位于 test/ 下,并镜像 lib/ 结构(lib/src/models/user.dart → test/src/models/user_test.dart),共享工具放在 test/helpers/。生命周期方法包括 setUp、tearDown、setUpAll、tearDownAll;registerFallbackValue 等一次性全局注册适合放在 setUpAll。

Mock 与验证 使用 Mocktail 创建私有 Mock 与 Fake;thenReturn 用于同步返回值,thenAnswer 用于异步/Future/Stream,thenThrow 用于抛异常。参数匹配器包括 any()、any(that: matcher)、captureAny()。验证方法包括 verify(...).called(n)、verifyNever、verifyNoMoreInteractions、verifyInOrder。所有与 any()/captureAny() 搭配的自定义类型需在 setUpAll 中 registerFallbackValue。

测试隔离 每个测试需能单独、任意顺序及并行通过,可用 --test-randomize-ordering-seed random 暴露隐藏依赖;所有初始化逻辑放在 group 内,Mock 保持文件私有。反模式包括在 main() 顶层写 setUp、顶层 final Mock 实例、公开 Mock 类、静态/全局可变变量、依赖固定执行顺序的测试。

常见模式 文档给出异步方法、Stream、异常、Equatable、通过公共 API 测试私有逻辑、回调等测试示例,并强调不直接测试私有方法。

Widget 测试 Widget 测试使用 testWidgets,默认用 find.byType,用户可见内容用 find.text,find.byKey 仅作最后手段;按 renders、navigates、calls [MethodName]、updates 等行为类别分组;Bloc/Cubit 使用 bloc_test 的 MockBloc/MockCubit,不提供真实 Bloc。pump 方法包括 pumpWidget、pump()、pump(Duration)、pumpAndSettle(),优先使用 pump(),因为 pumpAndSettle 在无限动画(如 CircularProgressIndicator)下可能挂起。交互后必须调用 pump()。反模式包括内联 MaterialApp、默认用 find.byKey、测试 padding/颜色/字号、交互后漏 pump、使用真实 Bloc。

附加资源 文档附带 references/widget-tests.md、references/golden-tests.md、references/matchers.md、references/configuration.md、references/coverage.md、references/animation-testing.md 等参考文件,分别覆盖 Widget 测试结构、golden 测试、匹配器、dart_test.yaml 配置、覆盖率与动画测试。

限制 资料未提供该技能的安装命令、收费方式、支持平台或具体版本要求,这些信息暂未提供。