0
点赞
收藏
分享

微信扫一扫

EA&UML日拱一卒-微信小程序实战:位置闹铃 (16)-单元测试是个技术活


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


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


测试对象


EA&UML日拱一卒-微信小程序实战:位置闹铃 (16)-单元测试是个技术活_小程

我们的测试对象是上一篇文章中说明的监控点状态迁移逻辑,也就是上面序列图右下角的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这个函数就是为了单元测试才设计出来的。


单元测试是个技术活。


写在文章的最后


阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】


EA&UML日拱一卒-微信小程序实战:位置闹铃 (16)-单元测试是个技术活_微_02


举报

相关推荐

0 条评论