📅  最后修改于: 2021-01-02 05:33:08             🧑  作者: Mango
测试是一项活动,用于验证和验证无错误且符合用户要求的软件或应用程序。它确保实际结果与预期结果相符。它还有助于在效率,可用性和准确性方面改进软件或应用程序。
为了确保应用程序的高质量,测试是应用程序开发生命周期中最重要的阶段之一。这是应用程序或软件开发中最消耗的阶段。
Flutter框架为应用程序的自动化测试提供了出色的支持。通常,自动测试分为三种类型以完全测试应用程序。它们如下:
这是测试应用程序或软件的最简单方法。它测试单个函数,方法或类。单元测试的目的是确保在各种条件下代码的正确性。通常,单元测试不会与用户输入交互,不会在屏幕上渲染,不会从磁盘读取或写入数据,并且默认情况下不会使用外部依赖项。当您使用外部依赖项时,它们会被Mockito之类的软件包嘲笑。
窗口小部件测试用于测试单个窗口小部件。该测试的目的是确保小部件的UI外观符合预期并与其他小部件交互。窗口小部件测试的过程类似于单元测试,但是比单元测试更全面。该测试涉及多个类,并且需要一个测试环境来查找更多错误。正在测试的窗口小部件可以接收并响应用户的操作和事件,并能够实例化子窗口小部件。
集成测试涉及以上测试以及应用程序的外部组件。它验证整个应用程序或应用程序的大部分。集成测试的目的是确保所有小部件和服务都能按预期工作。它还可以用来验证应用程序的性能。通常,集成测试在真实的设备(例如Android模拟器或iOS模拟器)上运行。
下面给出了不同类型的测试之间的权衡:
Unit Testing | Widget Testing | Integration Testing | |
---|---|---|---|
Confidence | Low | Higher | Highest |
Maintenance | Cost | LowHigher | Highest |
Dependencies | Few | More | Most |
Execution Speed | Quick | Quick | Slow |
我们知道,在Flutter中,一切都是小部件。因此,在这里,我们将详细讨论小部件测试。
在窗口小部件测试中,您需要flutter_test软件包提供的一些其他工具。该软件包提供了以下工具来测试小部件。
让我们通过以下步骤了解以上所有内容:
步骤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中测试”选项。它将运行测试,并在以下屏幕上显示结果: