前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TW洞见 | 郑晔:测试时间

TW洞见 | 郑晔:测试时间

作者头像
ThoughtWorks
发布2018-04-20 16:03:18
9300
发布2018-04-20 16:03:18
举报
文章被收录于专栏:ThoughtWorksThoughtWorks

在单元测试中,与时间相关的测试总是让人很头疼。举个例子,我们希望做一个定期过期缓存,比如30分钟过期,这该怎么测试呢?等30分钟?那要是过期时间是3天,你打算把开发时间全部交给等待,然后向老板汇报,我在等测试。祝你有一个糊涂的老板! 我们不妨分析一下,看看有没有什么不那么令人发指的解决方案。以上面的缓存为例,缓存怎么知道过了多长时间,它肯定是在哪取个时间?对于Java应用来说,很有可能最终就是调到System.currentTimeMillis()或者nanoTime()。但是,这两个方法都是静态方法,想用Mock的人可以休息了。 那么直接调用操作系统的方式修改时间呢?可以,只是一旦与具体的OS相关,各种跨平台的问题就随之而来,总而言之,麻烦。 许多计算机问题都是可以通过引入间接层来搞定的,这一次又到了“间接层”的表演时间了。正如前面所说,与时间相关的应用最终可能都要到最底层那两个方法。如果我们可以做一层隔离,让所有的调用都来到间接层,我们就可以在间接层上做手脚了。 事实上,这是一个如此通用的问题,以致于我们甚至都不需要提供自己的解决方案。 在Guava中,有一个类叫Ticker,它提供了一个方法叫做read(),他就是我们的间接层。缺省情况下,我们会直接使用Ticker.systemTicker(),顾名思义,它是系统提供的ticker,read方法最终会调用倒System.nanoTime()。如果测试需要,我们可以自己Mock出来一个Ticker,就像下面这样:

点击【阅读原文】可以继续查看精彩后文。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 思特沃克 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档