首页 > 其他分享 >无涯教程-Flutter - 代码测试

无涯教程-Flutter - 代码测试

时间:2023-09-02 13:32:05浏览次数:55  
标签:教程 tester Flutter Widget 无涯 测试 text find

测试是应用程序开发生命周期中非常重要的阶段,它确保了应用程序的高质量,测试需要仔细的计划和执行,这也是开发中最耗时的阶段。

Dart语言和Flutter框架为应用程序的自动化测试提供了广泛的支持。

通常,可以使用三种类型的测试过程来完全测试应用程序。它们如下-

单元测试

单元测试是测试应用程序的最简单方法,它基于确保一段代码(通常是一个函数)或类方法的正确性。

部件测试

Widget测试基于确保Widget创建,渲染以及与其他窗口 Widget按预期进行交互的正确性。

集成测试

集成测试涉及单元测试和窗口 Widget测试,以及应用程序的外部组件(如数据库),它模拟实际环境以查找几乎所有的bug,但这是最复杂的过程。

Flutter为所有类型的测试提供支持,它为Widget测试提供广泛且排他的支持。在本章中,无涯教程将详细讨论 Widget测试。

部件测试

Flutter测试框架提供了testWidgets方法来测试Widget。它接受两个参数-

  • 测试说明
  • 测试代码
testWidgets('test description: find a widget', '<test code>');

Widgets测试涉及三个不同的步骤-

  • 在测试环境中呈现Widget。

  • WidgetTester是Flutter测试框架提供的用于构建和呈现 Widget的类, WidgetTester类的pumpWidget方法接受任何Widget并将其呈现在测试环境中。

testWidgets('finds a specific instance', (WidgetTester tester) async { 
   await tester.pumpWidget(MaterialApp( 
      home: Scaffold( 
         body: Text('Hello'), 
      ), 
   )); 
});
  • 找到无涯教程需要测试的 Widget。

    • Flutter框架提供了许多选项来查找在测试环境中呈现的 Widget,通常将它们称为Finders。最常用的查找器是find.text,find.byKey和find.byWidget。

      • find.text查找包含指定文本的 Widget。

find.text('Hello')
      • find.byKey通过其特定键查找 Widget。

find.byKey('home')
      • find.byWidget通过其实例变量查找 Widget。

find.byWidget(homeWidget)
  • 确保 Widget按预期工作。

  • Flutter框架提供了许多选项,以使Widget与期望的Widget匹配,它们通常称为 Matchers 。无涯教程可以使用测试框架提供的Expect方法来匹配 Widget,通过选择任何匹配器,在第二步中将其与无涯教程的期望 Widget相匹配。一些重要的匹配项如下。

    • findsOneWidget - 验证是否找到了一个 Widget。

expect(find.text('Hello'), findsOneWidget);
    • findsNothing - 验证未找到任何 Widget

expect(find.text('Hello World'), findsNothing);
    • findsWidgets - 验证是否找到了多个窗口部件。

expect(find.text('Save'), findsWidgets);
    • findsNWidgets - 验证是否找到了N个 Widget。

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 Widget渲染了一个文本Hello的MaterialApp Widget。然后无涯教程使用find.text查找 Widget,然后使用findsOneWidget将其匹配

测试示例

让无涯教程创建一个简单的flutter应用程序并编写一个 Widget测试,以更好地理解所涉及的步骤和概念。

  • 在Android Studio中创建一个新的flutter应用程序flutter_test_app。

  • 在测试文件夹中打开widget_test.dart。它具有以下示例测试代码-

testWidgets('Counter increments smoke test', (WidgetTester tester) async {
   //构建我们的应用程序并触发一个框架。
   await tester.pumpWidget(MyApp()); 
   
   //验证我们的计数器是否从 0 开始。
   expect(find.text('0'), findsOneWidget); 
   expect(find.text('1'), findsNothing); 
   
   //点击“+”图标并触发一个框架。
   await tester.tap(find.byIcon(Icons.add)); 
   await tester.pump(); 
   
   //验证我们的计数器是否增加了。
   expect(find.text('0'), findsNothing); 
   expect(find.text('1'), findsOneWidget); 
});
  • 在这里,测试代码具有以下函数-

    •     - 使用tester.pumpWidget呈现MyApp Widget。

    •     - 使用findsOneWidget和findsNothing匹配器确保计数器最初为零。

    •     - 使用find.byIcon方法查找计数器增加按钮。

    •     - 使用tester.tap方法点击计数器增加按钮。

    •     - 确保使用findsOneWidget和findsNothing匹配器增加计数器。

  • 让无涯教程再次点击计数器增加按钮,然后检查计数器是否增加到两个。

await tester.tap(find.byIcon(Icons.add)); 
await tester.pump(); 

expect(find.text('2'), findsOneWidget);
  • 单击"Run"菜单。

  • 单击widget_test.dartoptions中的测试。这将运行测试并在输出窗口中报告输出。

Flutter Testing

参考链接

https://www.learnfk.com/flutter/flutter-testing.html

标签:教程,tester,Flutter,Widget,无涯,测试,text,find
From: https://blog.51cto.com/u_14033984/7332240

相关文章

  • 无涯教程-Flutter - 国际化
    为了使应用程序能够以不同的语言运行,它首先应找到运行该应用程序的系统语言,然后需要在该特定语言环境中显示其内容,此过程称为"本地化"。Flutter框架提供了三个用于本地化的基类和从基类派生的广泛的实用程序类,以对应用程序进行本地化。基类如下-Locale-语言环境是用于识别用......
  • Flink 1.17教程:任务槽Task Slots和并行度的关系
    任务槽TaskSlots在ApacheFlink中,任务槽(TaskSlots)是指可用于执行并行任务的资源单元。每个任务槽可以看作是一个可用的执行线程或处理单元,用于并行执行作业的不同部分。通俗来说,可以将任务槽想象成一个工作台,而每个工作台上都可以同时进行一项任务。任务槽的数量决定了同时可以......
  • Flink 1.17教程:Standalone会话模式运行时架构及并行度
    运行时架构——Standalone会话模式为例并行度并行度是指在计算过程中同时执行多个任务或操作的能力。在ApacheFlink中,并行度是指同时执行作业中的多个任务或算子的能力。并行度的引入是为了解决以下问题:提高计算速度:通过将任务拆分成多个子任务,并行执行它们,可以大大提高计算速度......
  • Flink 1.17教程:历史服务器History Server
    K8S运行模式容器化部署是如今业界流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是Kubernetes(k8s),而Flink也在最近的版本中支持了k8s部署模式。基本原理与YARN是类似的,具体配置可以参见官网说明,这里我们就不做过多讲解了......
  • Flink 1.17教程:并行度设置&优先级
    并行度设置&优先级并行度(Parallelism)并行度的设置在Flink中,可以用不同的方法来设置并行度,它们的有效范围和优先级别也是不同的。代码中设置我们在代码中,可以很简单地在算子后跟着调用setParallelism()方法,来设置当前算子的并行度:stream.map(word->Tuple2.of(word,1L)).setParall......
  • Flink 1.17教程:算子链Operator Chain
    算子链OperatorChain在ApacheFlink中,算子链(OperatorChaining)是将多个操作符(算子)连接在一起形成一个链式结构的优化技术。算子链的作用是将多个操作符合并为一个单一的任务单元,以减少通信开销、提高执行效率和减少资源占用。通俗来说,算子链的作用可以比喻为将多个操作合并成一......
  • Flink 1.17教程:Hadoop yarn会话运行模式
    YARN运行模式_环境准备YARN上部署的过程是:客户端把Flink应用提交给Yarn的ResourceManager,Yarn的ResourceManager会向Yarn的NodeManager申请容器。在这些容器上,Flink会部署JobManager和TaskManager的实例,从而启动集群。Flink会根据运行在JobManger上的作业所需要的Slot数量动态分配T......
  • Flink 1.17教程:部署模式介绍及Standalone运行模式
    部署模式介绍在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。Flink为各种场景提供了不同的部署模式,主要有以下三种:会话模式(SessionMode)、单作业模式(Per-JobMode)、应用模式(ApplicationMode)。它们的区别主要在于:集群的生命周期以及资源的分配方式;以及应用的mai......
  • Flink 1.17教程:Hadoop yarn运行模式——单作业模式和应用模式
    YARN运行模式_单作业模式单作业模式部署(1)执行命令提交作业YARN运行模式_应用模式应用模式同样非常简单,与单作业模式类似,直接执行flinkrun-application命令即可。如:bin/flinkrun-application-tyarn-application-ccom.atguigu.wc.WordCountStreamUnboundedDemo./FlinkTutorial......
  • Flink 1.17教程:命令行提交作业jar
    命令行提交作业bin/flinkrun-mnode001:8081-ccom.atguigu.wc.WordCountStreamUnboundedDemo../jar/FlinkTutorial-1.17-1.0-SNAPSHOT.jar连接成功Lastlogin:FriJun1614:44:012023from192.168.10.1[atguigu@node001~]$cd/opt/module/flink/flink-1.17.0/[atgu......