个性化阅读
专注于IT技术分析

Flutter测试

测试是一项活动, 用于验证和验证无错误且符合用户要求的软件或应用程序。它确保实际结果与预期结果相符。它还有助于在效率, 可用性和准确性方面改进软件或应用程序。

为了确保应用程序的高质量, 测试是应用程序开发生命周期中最重要的阶段之一。这是应用程序或软件开发中最消耗的阶段。

Flutter框架为应用程序的自动化测试提供了出色的支持。通常, 自动测试分为三种类型以完全测试应用程序。它们如下:

  1. 单元测试
  2. 小部件测试
  3. 整合测试
Flutter测试

单元测试

这是测试应用程序或软件的最简单方法。它测试单个函数, 方法或类。单元测试的目的是确保在各种条件下代码的正确性。通常, 单元测试不会与用户输入交互, 在屏幕上渲染, 从磁盘读取或写入数据, 并且默认情况下不使用外部依赖项。当你使用外部依赖项时, 它们会被Mockito之类的软件包嘲笑。

小部件测试

窗口小部件测试用于测试单个窗口小部件。该测试的目的是确保小部件的UI外观符合预期并与其他小部件交互。窗口小部件测试的过程类似于单元测试, 但是比单元测试更全面。该测试涉及多个类, 并且需要一个测试环境来查找更多错误。正在测试的窗口小部件可以接收并响应用户的操作和事件, 并能够实例化子窗口小部件。

整合测试

集成测试涉及以上测试以及应用程序的外部组件。它验证整个应用程序或应用程序的大部分。集成测试的目的是确保所有小部件和服务都能按预期工作。它还可以用来验证应用程序的性能。通常, 集成测试在真实的设备(例如Android模拟器或iOS模拟器)上运行。

下面给出了不同类型的测试之间的权衡:

单元测试 小部件测试 整合测试
Confidence Low Higher Highest
Maintenance Cost 低高 Highest
Dependencies Few More Most
执行速度 Quick Quick Slow

我们知道, 在Flutter中, 一切都是小部件。因此, 在这里, 我们将详细讨论小部件测试。

小部件测试简介

在窗口小部件测试中, 你需要flutter_test软件包提供的一些其他工具。该软件包提供了以下工具来测试小部件。

  • WidgetTester:它允许在测试环境中构建窗口小部件并与之交互。
  • testWidgets():此方法为每个测试用例自动创建一个WidgetTester。它用作普通的test()函数。它接受两个参数:测试描述和测试代码。
  • Finder类:用于在测试环境中搜索窗口小部件。
  • Matcher类:它有助于验证Finder类是在测试环境中定位单个窗口小部件还是多个窗口小部件。

让我们通过以下步骤来学习以上所有方面:

步骤1:添加flutter_test依赖项。

第一步, 我们需要在pubspec.yaml文件中添加flutter_test依赖项。默认情况下, 它已被添加到依赖项部分。

步骤2:创建要测试的小部件。

接下来, 我们必须创建一个小部件来执行测试。以下代码段创建了一个小部件, 其中包含要在屏幕上显示的标题和消息。

class MyAppWidget extends StatelessWidget {
  final String title;
  final String message;

  const MyWidget({
    Key key, @required this.title, @required this.message, }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Testing Demo', home: Scaffold(
        appBar: AppBar(
          title: Text(title), ), body: Center(
          child: Text(message), ), ), );
  }
}

步骤3:创建一个testWidgets测试。

要测试小部件, 请使用testWidget()方法。这种方法允许我们定义一个测试并接受两个参数:测试描述和测试代码。它还创建了一个WidgetTester来与小部件一起使用。下面的代码验证MyAppWidget是否显示标题和消息。

void main() {
  testWidgets(' The widget contains a title and message', (WidgetTester tester) async {
    // Write test code here.
  });
}

步骤4:使用WidgetTester构建小部件。

WidgetTester提供了pumpWidget()方法来构建和呈现所提供的窗口小部件。它创建MyAppWidget实例, 分别显示“ Ti”和“ Msg”作为标题和消息。以下代码对其进行了更清晰的说明。

void main() {
    testWidgets(The widget contains a title and message', (WidgetTester tester) async {
        await tester.pumpWidget(MyWidget(title: 'Ti', message: 'Msg'));

  });
}

步骤5:使用Finder搜索小部件。

在此步骤中, 我们将使用Finder类在小部件树中搜索标题和消息。它允许我们验证窗口小部件是否正确显示。为此, 我们需要使用find.text()方法。

void main() {
    testWidgets(The widget contains a title and message', (WidgetTester tester) async {
    await tester.pumpWidget(MyWidget(title: 'Ti', message: 'Msg'));

    final titleFinder = find.text('Ti');
    final messageFinder = find.text('Msg');

  });
}

步骤6:使用Matcher验证小部件。

最后, 我们需要使用Matcher类来验证文本消息是否出现在屏幕上。它可以确保小部件在屏幕上仅出现一次。我们可以看下面的代码来理解它。

void main() {
    testWidgets(The widget contains a title and message', (WidgetTester tester) async {
    await tester.pumpWidget(MyWidget(title: 'Ti', message: 'Msg'));

    final titleFinder = find.text('Ti');
    final messageFinder = find.text('Msg');

    expect(titleFinder, findsOneWidget);
    expect(messageFinder, findsOneWidget);
  });
}

现在, 我们将看到工作示例以了解小部件测试的概念。首先, 在Android Studio中创建一个项目, 然后导航到项目目录的test文件夹。现在, 打开widget_test.dart文件并替换以下代码:

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
    testWidgets(The widget contains a title and message', (WidgetTester tester) async {
    // Create the widget by telling the tester to build it.
    await tester.pumpWidget(MyWidget(title: 'Ti', message: 'Msg'));

    // Create the Finders.
    final titleFinder = find.text('Ti');
    final messageFinder = find.text('Msg');

    expect(titleFinder, findsOneWidget);
    expect(messageFinder, findsOneWidget);
  });
}

class MyAppWidget extends StatelessWidget {
  final String title;
  final String message;

  const MyAppWidget({
    Key key, @required this.title, @required this.message, }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Testing Demo', home: Scaffold(
        appBar: AppBar(
          title: Text(title), ), body: Center(
          child: Text(message), ), ), );
  }
}

要执行测试, 请转到“运行”菜单, 然后选择“在widget_test.dart中测试”选项。它将运行测试, 并在以下屏幕上显示结果:

Flutter测试

赞(0)
未经允许不得转载:srcmini » Flutter测试

评论 抢沙发

评论前必须登录!