写点什么

如何对时间和日期进行系统与验收测试

  • 2009-12-04
  • 本文字数:1014 字

    阅读完需:约 3 分钟

人们经常探讨如何对时间和日期进行单元测试,因为我们无法在测试用例中使用绝对时间,否则即便测试通过,那也仅仅是针对该具体的日期通过而已。解决该问题的标准方式是采取由大佬 Adam Sroka 提出的依赖注入:

要想对大量日期进行测试需要对其进行计算,但执行计算的方法绝不可以自己获取这些日期,无论日期是“now”、来自于数据库还是用户输入。我们应该在一个较高层次上获取日期并对其进行计算。

对于单元测试来说这是小菜一碟,但问题是我们在验收与系统测试中应该如何做呢? Andreas Ebbert-Karroum 对于该问题给出了 3 个解决方案:

  1. 在测试中,保证期望的结果也是取决于日期和时间的。
  2. 修改应用以保证其不会使用系统的当前时间而是使用时间服务,我们可以远程控制该服务以使用不同的时间而不是当前的系统时间
  3. 远程修改系统时间

xUnit Test Patterns 一书的作者 Gerard Meszaros 使用了第二种方式(又名 Virtual Clock Pattern):

我们在真实的时间服务上添加了一个抽象层(意思就是通过一个接口隐藏了对系统时间 API 的调用),然后在用测试脚本进行测试时替换掉该实现。默认情况下实现应该是可插拔的。 这么做的好处是可以确保每次运行时都能覆盖所有的测试情况,可用于测试时间的竞态条件( race conditions)。

来自 Software Development Coach George Dinwiddie 说单独的时间源可以避免一些微妙的问题,运行在多个机器上的系统会有多个系统时间,比如说一台机器上的系统时间和另一台机器上的数据库时间等等。

Ward Cunnigham 维基百科)采取了一种不同的方式:“在swim 框架中,测试用例运行了几周。我们使用了一个全局变量$now 来编写SQL,该表达式会在每次执行之前处理好时间问题,无论是小时、天还是周。这种方式对于SQL 的跟踪非常有效”。

来自 FitSharp 的开发者Mike Stockdale 指出这种方式支持相对日期的解析,比如today+2。 FitLibrary 的创建者 Rick Mugridge 说这种方式具有一个“一般意义上的日期生成 DSL”,它考虑到了不同时区中(具有不同的格式)相对日期的选择问题。我们可以在月末选择日期,也可以在周一选择。这种方式广泛应用在预约系统中,在这类系统中未来日期的选择是个重要的议题,因此测试必须要利用系统中已有的数据(以及日期)。而测试自动化架构师 Martin Gijsen 则使用 ANTLR 来解决该问题。

综上所述,Andreas 提出的前两种方案都得到了广泛的应用。你使用哪种方式呢,其优缺点又各是什么呢?

查看英文原文: System/Acceptance Testing with Time and Dates

2009-12-04 13:251817
用户头像

发布了 88 篇内容, 共 266.7 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

如何清除 WordPress 中的缓存

海拥(haiyong.site)

WordPress 5月月更

4月月更开奖啦!中奖者速来领取!

InfoQ写作社区官方

热门活动

关于数据一致性的理论

穿过生命散发芬芳

数据一致性 5月月更

在线HTTP请求头响应头转JSON工具

入门小站

工具

动辄“耗资过亿”的表格工具,究竟难在哪儿?

葡萄城技术团队

维护版式文档技术生态 国际PDF协会向福昕软件发来感谢信

联营汇聚

深入剖析 split locks,i++ 可能导致的灾难

火山引擎开发者社区

“软件定义汽车”的数字化之变,华为云低代码平台带来了什么?

脑极体

云图说|华为云帮助中心最佳实践:源自项目实战的上云指导

华为云开发者联盟

最佳实践 华为云 云图说 帮助中心 业务上云

备受关注的Bit.Store,最新动态一览

西柚子

Hadoop Echarts

Emperor_LawD

hadoop 5月月更

linux之iftop命令

入门小站

Linux

“四大高手”为你的 Vue 应用程序保驾护航

葡萄城技术团队

如何开发 LAXCUS 分布式应用软件(四):编写边缘端软件

LAXCUS分布式操作系统

并行计算 端边云协同架构 分布式操作系统 分布式应用软件

架起医院就诊“快车道”,YRCloudFile 打造智慧 PACS 存储系统

焱融科技

云计算 分布式 高性能 文件存储 智慧医疗

时序数据库在监控运维平台中的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

备受关注的Bit.Store,最新动态一览

小哈区块

我国类脑计算处于什么水平?人工智能下神经科学启发的类脑计算。

GPU算力

人工智能 液冷服务器 类脑计算 神经科学

Cilium 多集群 ClusterMesh 介绍

Se7en

快速上手 Pythond 采集器的最佳实践

观测云

运维 可观测性 可观测

2021年国内促进软件产业发展十大事件出炉,HarmonyOS 2入选

科技汇

数据产品经理的价值管理

第519区

团队管理 项目管理 产品经理 数据产品经理 项目经理

String源码解析-String的使用注意2

zarmnosaj

5月月更

谁说 Zadig 只能复制环境?数百微服务一套环境实现高效协作

Zadig

DevOps 云原生 CI/CD 软件交付

基于 Agora SDK 实现 Windows 端的一对一视频通话(基于3.6.2版本)

声网

人工智能 音视频 sdk

实现同比、环比计算的N种姿势

葡萄城技术团队

数据分析 BI数据分析 同比 环比

【刷题第五天】1. 两数之和

白日梦

5月月更

钉钉 Flutter 跨四端方案设计与技术实践 | Dutter

阿里巴巴终端技术

flutter 移动端 跨端框架 桌面端

玩了一场剧本杀,同车队友“不是人”

脑极体

在线TSV转纯文本工具

入门小站

工具

在字节跳动,一个更好的企业级SparkSQL Server这么做

字节跳动数据平台

如何对时间和日期进行系统与验收测试_研发效能_Mark Levison_InfoQ精选文章