程序设计,实现之后的下一个环节就是单元测试了。对于位置闹铃小程序来讲,带着设备到处移动以测试监控点的状态迁移就是一个必经之路,但是如果所有环节都通过实地测试来解决,那将耗费大量的时间和体力。

我们的选择是,在实地测试之前,用尽量少地代价做好单元测试。

测试对象

我们的测试对象是上一篇文章中说明的监控点状态迁移逻辑,也就是上面序列图右下角的enterAlarmCheck函数。这个函数可以说是这个小程序地核心。它的调用关系如下。

  1. 系统调用index的onTimer函数(实际上是一个无名函数)。

  2. onTimer函数调用app的checkAlarms函数。

  3. checkAlarm函数调用app的checkAlarmsImpl函数

  4. checkAlarmsImpl调用util.getLocation函数取得现在的位置信息。

  5. checkAlarmsImpl取得每个监控点alarm并用getLocation取得的位置信息调用alarm的checkLocation方法

  6. alarm的checkLocation方法调用getDistance方法取得现在位置到监控点的距离。

  7. alarm的enterAlarmCheck根据最新的距离信息进行状态迁移处理。

测试方法

其他的都好说,这里唯一的测试难点就是位置变化,我们采用了最为简单粗暴地方式:直接修改alarm的getDistance方法。

getDistance: function (latitude, longitude) {

var test =

[800, 700, 600, 500, 400, 300, 200, 100,

90, 80, 70, 60, 50, 40, 52, 43, 53, 81, 101,

201, 301, 401, 501, 502, 403, 304, 204, 105,

96, 87, 78, 69, 50, 41, 42, 43, 54, 89, 100,

110, 123, 145, 156]

if(this.testIndex < test.length){

return test[this.testIndex++]

}else{

return 0

}

//return util.getDistance(this.latitude, this.longitude, latitude, longitude)

},

函数的本来功能已经被屏蔽掉,直接修改为每次返回数组中的数字。通过修改数组的内容我们可以模拟各种运动情况。

也许你觉得修改uitl.getLocation函数也是一种方式,但是它有两个问题:一是这个函数有可能在其他地方被调用,二是生成的数据必须是经纬度,很麻烦。

其实getDistance这个函数就是为了单元测试才设计出来的。

单元测试是个技术活。

写在文章的最后

既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。本公众号的成长需要您的支持!
以上就是今天的文章,欢迎点赞并推荐给您的朋友!
更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

EAUML日拱一卒-微信小程序实战:位置闹铃 (16)-单元测试是个技术活相关推荐

  1. EAUML日拱一卒-微信小程序实战:位置闹铃 (5)-显示所在位置的信息

    假设我们指定了多个监控点,接下来的需求就是给每个监控点取名字.如果是手动输入的话,会比较麻烦.所以位置闹铃再向前走一步,从地图上取得监控点所在位置的信息作为监控点的名称. 画面说明 当我们选定监控点以 ...

  2. EAUML日拱一卒-微信小程序实战:位置闹铃 (18)-差不多就这样了

    经过一段时间地实现和测试,位置闹铃小程序开发也渐渐接近尾声了.作为一个练习,差不多也就这样了. 今天介绍小程序的功能. 启动小程序 扫描下面的二维码即可启动位置闹铃小程序. 功能介绍 首先是主画面,第 ...

  3. EAUML日拱一卒-微信小程序实战:位置闹铃 (15)-实现监控点状态迁移功能

    简单地设计以后,就可以开始着手实现了. 接近监控点 enterAlarmCheck: function (distance, accuracy){ if (this.state == 'ready') ...

  4. EAUML日拱一卒-微信小程序实战:位置闹铃 (19)-发布微信小程序

    小程序的功能实现之后,经过一段时间地测试,接下来就是发布了. 在开发工具的上面偏右的位置,有一个[上传]按钮,按下它就可以将小程序上传到微信小程序公众号. 登录自己的小程序帐号,进入开发管理页面. 画 ...

  5. EAUML日拱一卒-微信小程序实战:位置闹铃 (17)-保存和取出设定信息

    设定了监控点之后,小程序会取得最新位置,判断各个监控点的到达,离开情况并播放提示音.很多情况下,用户会希望这些信息可以保存起来以便将来使用. 这就是今天的主题:在小程序中保存设定信息. API 位置闹 ...

  6. EAUML日拱一卒-微信小程序实战:位置闹铃 (8)-WXML条件渲染

    需求 按照位置闹铃程序的设计,当设备接近或者离开某个区域时,可以播放提示音,也可触发记时器动作.按照设计,我们的画面是这样的. 提示音选择画面 计时器选择画面 实现方式 一般来讲,根据动作动作类型选择 ...

  7. EAUML日拱一卒-微信小程序实战:位置闹铃 (6)-播放音频

    昨天停更了一天,不是作者偷懒,而是掉到了一个坑里.本来以为播放音频很简单,但是还是遇到的各种问题,比如: 1)小程序无法播放手机存储目录中的文件,只能播放网上的或者是小程序暂存的文件. 2)播放暂存文 ...

  8. EAUML日拱一卒-微信小程序实战:位置闹铃 (20)-发布微信小程序(续)

    头一天晚上申请,到第二天早上也没有通过,所以就有了这篇续. 审批通过以后,首先手机的服务通知收到这个: 登录小程序帐号,画面的右上角也会有提示. 这时的开发管理页面是这样的: 可以看到审核版本栏版本号 ...

  9. EAUML日拱一卒-微信小程序实战:位置闹铃 (14)-分析监控点状态

    将监控点包装成一个类以后,接下来应该就是设计和实现监控点功能了.今天先是设计.我们分接近监控点和离开监控点两种情况讨论. 接近监控点 ready状态 监控点工作状态,小程序会对设备位置进行监控,如果有 ...

最新文章

  1. js下拉 selenium_selenium 常见面试题以及答案(Java版)
  2. 1.3.3 错题整理(组成原理)
  3. java 关键字volatile的作用
  4. 解决IntelliJ IDEA报错Error: java: 错误: 不支持发行版本 XX
  5. java jpa性能_[Java Performance] 数据库性能最佳实践 - JPA和读写优化
  6. SpringCloud或SpringBoot+Mybatis-Plus利用mybatis插件实现数据操作记录及更新对比
  7. React-Native 相关
  8. 如果一非零的整系数多项式能够分解成两个次数较低的有理系数多项式的乘积,那么它一定能分解成两个次数较低的整系数多项式的乘积
  9. 在Windows编译libssh
  10. python正态分布代码_Tests for normality正态分布检验(python代码实现)
  11. Mysql 计算年龄函数
  12. 戴德金--连续性和无理数--我自己做的中文翻译第4页
  13. 安卓开发——做一个能定时唤起其他APP的闹钟程序
  14. pointer-event属性详解
  15. 注册页面案例-世纪佳缘
  16. 【转载】十款必备牛逼的IDEA插件
  17. 陕西延安一男子看钓鱼忘拉手刹,爱车溜进鱼塘:自己都惊呆了
  18. 刷屏的Google Pay:羊毛是你的,你是我的
  19. 如何去掉Mac窗口截图自带的阴影呢?教程来了不要错过哦
  20. word 参考文献 交叉引用 自动更新

热门文章

  1. 详解“==”和equals的区别
  2. JS实现网站声音提示,兼容IE与chrome,附谷歌chrome浏览器无法自动播放声音解决方法
  3. 太阳能发电系统的构成及简单工作原理
  4. 你公司的虚拟机还闲着?基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!...
  5. 60度斜坡怎么计算_坡度怎么算
  6. Letswave 教程:脑电数据预处理与叠加平均
  7. 八进制、十进制、操作符(day04)
  8. LaTeX 页眉页脚的设置
  9. discuz模板文件列表
  10. 覆盖Laracon:在线会议会向内倾吗?