当前位置: 首页 > news >正文

专业做网站系统西安网站开发制作公司

专业做网站系统,西安网站开发制作公司,怎样做平台推广,1688成品网站源码哈喽,我是老刘 这两天发现一个Flutter 3.24版本的单元测试的一个小bug,提醒大家注意一下。 老刘自己写代码十多年了,写Flutter也6年多了,没想到前两天在一个小小的BottomNavigationBar 组件上翻了车。 给大家分享一下事件的经过。…

哈喽,我是老刘

这两天发现一个Flutter 3.24版本的单元测试的一个小bug,提醒大家注意一下。
老刘自己写代码十多年了,写Flutter也6年多了,没想到前两天在一个小小的BottomNavigationBar 组件上翻了车。
给大家分享一下事件的经过。

问题经过

这件事的起因是最近想做一个自己用的小App,Flutter实现。
大家知道我一直是TDD的践行者,所以就先写了首页的测试代码。
首页底部设计有两个tab按钮,我的这个测试是点击按钮切换页面内容。
实现方法是BottomNavigationBar 配合页面内容的TabView。

结果在执行tester.tap方法的地方测试代码就崩了。
就只有一句提示
在这里插入图片描述

大家注意
No tests match “xxx…”
这种提示,如果经排查发现,测试代码中加入某个操作就出现,那么就可以怀疑一下是测试框架底层崩溃导致的。

我当时第一反应是不是我的BottomNavigationBar 的用法有问题?
因为之前是不用这个组件的,我们有自己封装的UI组件库,这次是图省事想简单看一下效果。
但是反复排查也没发现问题,而且真机运行也没问题。

这时候我还是怀疑我自己哪个地方没用对,于是把官方的组件测试代码拿过来试了一下。

testWidgets('BottomNavigationBar callback test', (WidgetTester tester) async {late int mutatedIndex;await tester.pumpWidget(MaterialApp(home: Scaffold(bottomNavigationBar: BottomNavigationBar(items: const <BottomNavigationBarItem>[BottomNavigationBarItem(icon: Icon(Icons.ac_unit),label: 'AC',),BottomNavigationBarItem(icon: Icon(Icons.access_alarm),label: 'Alarm',),],onTap: (int index) {mutatedIndex = index;},),),),);await tester.tap(find.text('Alarm'));expect(mutatedIndex, 1);
});

结果也崩了。
这时候已经是凌晨1点多了,脑子有点不清醒。
本来打算去睡觉明天再说,可是突然灵光一闪,是不是我手欠选择了Flutter 3.24.5版本的问题?
于是换成3.10,结果没问题了,测试正常通过。
然后我就清醒了,感觉问题不是出在BottomNavigationBar上,有可能所有点击事件都有问题。
于是我又写了一个简单的测试代码:

testWidgets('Button tap test', (WidgetTester tester) async {int ex = 0;await tester.pumpWidget(MaterialApp(home: Scaffold(body: Center(child: TextButton(child: const Text('Alarm'), onPressed: () {ex = 1;}),),),),);await tester.tap(find.text('Alarm'));expect(ex, 1);
});

果不其然,也崩了。
在这里插入图片描述
所以应该是Flutter 3.24版本下,test环境,点击动作有问题。

这时候凌晨两点多,已经困的不行了,睡觉,明天再说。

问题确定

第二天起来理了理思路,在想应该先排除一下我的本地环境问题,于是在我的笔记本上又尝试了一次。
笔记本也复现了这个问题,而且幸运的是笔记本上海多了一个错误提示:
在这里插入图片描述

 [ERROR:flutter/impeller/runtime_stage/runtime_stage.cc(28)] Reached unreachable code.

这个提示怎么看起来是impeler的问题呢?
上网搜了一下,果然有人报了这个bug
[ERROR:flutter/impeller/runtime_stage/runtime_stage.cc(28)] Reached unreachable code. · Issue #147551 · flutter/flutter · GitHub
而且他是在mac上,Flutter版本是3.22
我本地测试了一下Flutter 3.19,是没问题的,所以问题大概率出在3.20之后。

问题的具体细节和原因没有花时间细看。
这里一方面给大家一个提示,碰到这个问题大概知道是咋回事。
另一方面也是借着这个定位过程总结一下经验。

总结经验

1、当运行的框架,特别是框架的底层代码比如c++代码崩溃,就很容易出现一些奇怪的现象误导开发者。
比如这次的提示 【No tests match “xxx…”】
2、如果怀疑是test框架的问题,可以通过命令行运行并加入一些类似“-v”的参数查看运行更详细的过程。
这样可以帮你快速判断问题来源。
话说自己的课程里还经常提醒这一点,结果用到的时候就没想起来。
我是直到第二天用笔记本运行看到异常提示信息才想起来,这个属实有点不应该。
3、关于TDD中的UI测试,老刘一贯的观点是只测试UI中涉及业务逻辑的部分,不测试UI布局和交互的细节。
就好像这次的测试例:‘用户点击个人中心按钮,页面内容切换为个人中心’
它测试的其实是如何实现一个UI效果,这部分内容是否应该通过测试覆盖,应该覆盖到什么程度其实是值得商榷的。
比如如果我通过DefaultTabController + TabView + TabBar来实现这个效果,那其实测试的就是DefaultTabController的内部逻辑了。

好了,以上这些基于这次这个问题的思考才是我这篇文章想要表达的核心内容。
如果大家有更多的想法或者不同意见都欢迎交流。
点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。
可以作为Flutter学习的知识地图。
覆盖90%开发场景的《Flutter开发手册》

http://www.mmbaike.com/news/67561.html

相关文章:

  • 为企业做贡献的文章泸州网站优化推广
  • 怎么从阿里巴巴做网站seo推广策划
  • 营销型网站有哪些代表seo管理系统培训
  • 网站建设 指标创建网站花钱吗
  • 可以做英语阅读理解的网站广州网络科技有限公司
  • 盐城高端网站制作公司百度网盘app官网
  • 网站建设谈单思路seo自动推广工具
  • 网站404页面优化企业网站制作公司
  • 吴中区做网站的公司公司推广渠道有哪些
  • 如何做网站的悬浮窗口百度人工客服24小时电话
  • 网站建设预算明细高端大气网站建设
  • 郑州企业网站建设网站关键词推广价格
  • 漯河做网站哪家好如何优化关键词搜索排名
  • 百度搜索到自己的网站百度上免费创建网站
  • html5网站演示seo服务外包公司
  • 网站建设2019在线检测网站安全
  • 网站建设 大公司小公司百度怎么优化网站关键词
  • 有哪些制作网站的公司吗湖南seo优化哪家好
  • 网站做弹窗广告销售外包
  • 网站开发检测用户微信号企业推广平台排行榜
  • 电力建设专家答疑在哪个网站百度知道入口
  • 网站开发培训光山怎么找专业的营销团队
  • 有哪些做调查问卷赚钱的网站最新军事新闻事件今天
  • 用阿里云和大淘客做网站海外seo网站推广
  • 30人的网站建设公司年利润是多少推广策划方案
  • 有什么那个网站亚洲卫星电视网参数表
  • 网站界面类型如何推广一个新的app
  • 付网站首期合同款怎么做分录百度一下你就知道官网百度
  • 中央广播电视台直播太原seo排名公司
  • 网站建设部网网络优化这个行业怎么样