用途:在 Flutter 项目中实现组件级(Widget)测试,验证 UI 渲染与用户交互,如点击、滚动、输入文本,适合在开发过程中校验组件的初始状态与交互后的状态变化。
必要配置:在 pubspec.yaml 的 dev_dependencies 中添加 flutter_test 依赖;测试文件放在项目根目录 test/ 下,文件名以 _test.dart 结尾。
核心组件:WidgetTester(由 testWidgets() 自动提供,用于构建和交互 widget)、Finder(定位 widget,如 find.text('Submit')、find.byType(TextField)、find.byKey(Key('submit_btn')))、Matcher(校验定位结果,如 findsOneWidget、findsNothing、findsNWidgets(2)、matchesGoldenFile)。
实现流程:用 testWidgets 定义测试;调用 await tester.pumpWidget(MyWidget()) 渲染 UI(若依赖方向或主题数据,需用 MaterialApp 或 Directionality 包裹);用 Finder 定位元素;用 expect 校验初始状态;模拟交互;调用 await tester.pump() 或 await tester.pumpAndSettle() 触发重建;再次用 expect 校验更新后状态;执行 flutter test test/your_test_file_test.dart 运行并迭代。
交互与状态:静态渲染只需 pumpWidget 一次后断言;普通状态变化(如点击按钮)用 await tester.tap(finder) 后 await tester.pump();动画、过渡或异步 UI 更新用 await tester.pumpAndSettle() 直到没有待处理帧;文本输入用 await tester.enterText(textFieldFinder, 'Input string');长列表用 await tester.scrollUntilVisible(itemFinder, 500.0, scrollable: listFinder) 确保目标 widget 已渲染。
限制:未提供其他版本、收费或平台信息。