- 颤振教程
- 颤动 - 主页
- 颤振 - 简介
- 颤振 - 安装
- 在 Android Studio 中创建简单的应用程序
- Flutter - 架构应用
- Dart 编程简介
- Flutter - Widget 简介
- Flutter - 布局简介
- Flutter - 手势简介
- Flutter - 状态管理
- 颤动 - 动画
- Flutter - 编写 Android 特定代码
- Flutter - 编写 IOS 特定代码
- Flutter - 包简介
- Flutter - 访问 REST API
- Flutter - 数据库概念
- Flutter - 国际化
- 颤振 - 测试
- Flutter - 部署
- Flutter - 开发工具
- Flutter - 编写高级应用程序
- 颤动 - 结论
- 颤动有用的资源
- Flutter - 快速指南
- Flutter - 有用的资源
- Flutter - 讨论
颤振 - 测试
测试是应用程序开发生命周期中非常重要的阶段。它确保了应用程序的高质量。测试需要仔细的计划和执行。这也是开发过程中最耗时的阶段。
Dart语言和Flutter框架为应用程序的自动化测试提供了广泛的支持。
测试类型
通常,可以使用三种类型的测试过程来完整测试应用程序。它们如下 -
单元测试
单元测试是测试应用程序的最简单的方法。它基于确保类的一段代码(通常是一个函数)或方法的正确性。但是,它不能反映真实环境,因此是发现错误的最少选择。
小部件测试
小部件测试的基础是确保小部件创建、渲染以及与其他小部件交互的正确性。它更进一步,提供近乎实时的环境来发现更多错误。
集成测试
集成测试涉及单元测试和小部件测试以及应用程序的外部组件(如数据库、Web 服务等),它模拟或模拟真实环境以发现几乎所有错误,但它是最复杂的过程。
Flutter 为所有类型的测试提供支持。它为 Widget 测试提供广泛且独家的支持。在本章中,我们将详细讨论小部件测试。
小部件测试
Flutter测试框架提供了testWidgets方法来测试widget。它接受两个参数 -
- 测试说明
- 测试代码
testWidgets('test description: find a widget', '<test code>');
涉及的步骤
小部件测试涉及三个不同的步骤 -
在测试环境中渲染小部件。
WidgetTester 是 Flutter 测试框架提供的用于构建和渲染 widget 的类。WidgetTester 类的 PumpWidget 方法接受任何小部件并将其呈现在测试环境中。
testWidgets('finds a specific instance', (WidgetTester tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold( body: Text('Hello'), ), )); });
找到我们需要测试的小部件。
Flutter框架提供了很多选项来查找测试环境中渲染的widget,它们通常被称为Finders。最常用的查找器是 find.text、find.byKey 和 find.byWidget。
find.text 查找包含指定文本的小部件。
find.text('Hello')
find.byKey 通过特定键查找小部件。
find.byKey('home')
find.byWidget 通过实例变量查找小部件。
find.byWidget(homeWidget)
确保小部件按预期工作。
Flutter框架提供了许多选项来将小部件与预期的小部件进行匹配,它们通常称为匹配器。我们可以使用测试框架提供的 Expect 方法来匹配小部件,我们在第二步中通过选择任何匹配器找到了我们期望的小部件。一些重要的匹配器如下。
findOneWidget - 验证是否找到单个小部件。
expect(find.text('Hello'), findsOneWidget);
findNothing - 验证没有找到小部件
expect(find.text('Hello World'), findsNothing);
findWidgets - 验证是否找到多个小部件。
expect(find.text('Save'), findsWidgets);
findNWidgets - 验证找到 N 个小部件。
expect(find.text('Save'), findsNWidgets(2));
完整的测试代码如下 -
testWidgets('finds hello widget', (WidgetTester tester) async { await tester.pumpWidget(MaterialApp( home: Scaffold( body: Text('Hello'), ), )); expect(find.text('Hello'), findsOneWidget); });
在这里,我们使用主体中的 Text 小部件渲染了一个带有文本 Hello 的 MaterialApp 小部件。然后,我们使用find.text来查找小部件,然后使用findOneWidget进行匹配。
工作示例
让我们创建一个简单的 flutter 应用程序并编写一个小部件测试,以更好地理解所涉及的步骤和概念。
在 Android studio 中创建一个新的 flutter 应用程序 flutter_test_app。
打开测试文件夹中的 widget_test.dart。它有一个示例测试代码,如下所示 -
testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. await tester.pumpWidget(MyApp()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget); expect(find.text('1'), findsNothing); // Tap the '+' icon and trigger a frame. await tester.tap(find.byIcon(Icons.add)); await tester.pump(); // Verify that our counter has incremented. expect(find.text('0'), findsNothing); expect(find.text('1'), findsOneWidget); });
在这里,测试代码执行以下功能 -
使用 tester.pumpWidget 呈现 MyApp 小部件。
使用 findOneWidget 和 findNothing 匹配器确保计数器最初为零。
使用 find.byIcon 方法查找计数器增量按钮。
使用 tester.tap 方法点击计数器增量按钮。
确保使用 findOneWidget 和 findNothing 匹配器增加计数器。
让我们再次点击计数器递增按钮,然后检查计数器是否增加到 2。
await tester.tap(find.byIcon(Icons.add)); await tester.pump(); expect(find.text('2'), findsOneWidget);
单击运行菜单。
单击 widget_test.dart 选项中的测试。这将运行测试并在结果窗口中报告结果。