“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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

  • 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:251503
用户头像

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

关注

评论

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

优化技术专题-性能优化系列-针对Java对象压缩及序列化技术的探索之路

洛神灬殇

序列化协议 序列化机制 10月月更

常州一家等保测评公司在哪里?联系电话多少?

行云管家

网络安全 堡垒机 等级保护 等保测评 过等保

自媒体团队会面临哪些瓶颈和困境

石头IT视角

NB!阿里首次公布Java10W字面经,Github访问量破百万

Java 程序员 架构 面试 计算机

Kubernetes Service Proxy 无秘密

绅鱼片

Kubernetes 网络 iptables k8s网络 kube-proxy

WICC 话题剧透|Beeto 陈昊:中东爆款社交平台是怎样炼成的

融云 RongCloud

AI 在视频领域运用—弹幕穿人

百度Geek说

AI 后端 弹幕 视频

Sentinel-Go 源码系列(一)|开篇

捉虫大师

sentinel Go 语言

C2C交易软件系统开发(源码)

现成C2C场外交易源码系统开发

mysql binlog日志信息查看

梁小航航

MySQL Binlog

SQL实现连续登陆人数天数统计

大象灵感

sql 大数据 hive 数据仓库 数据分析

/var/lib/docker目录磁盘满了,更换默认目录

阿呆

高效动画实现原理-Jetpack Compose 初探索

vivo互联网技术

动画 Google 框架 移动开发 Andriod

华为云GaussDB深耕数字化下半场,持续打造数据库根技术

华为云数据库小助手

GaussDB 大会 GaussDB(for openGauss) 华为云数据库

021云原生之Kubernetes 部署

穿过生命散发芬芳

云原生 10月月更

现成交易所系统软件开发案例

语聊房 SDK,下一代场景化解决方案新范式

融云 RongCloud

【高热FAQ】关于智慧康养物联网加速器 ,你想知道的都在这

华为云开发者联盟

物联网 硬件开发 智慧康养 华为云物联网平台 SaaS应用

官方线索|CCF CED中国工程师文化日

轻口味

1024我在现场

运营型CRM系统(运营型客户关系管理)只是针对于运营的吗?

低代码小观

企业 企业管理 CRM 管理系统 运营型CRM

【服务器】服务器租用后如何高效管理,不出纰漏?

行云管家

服务器 IT运维 运维管理 服务器租用

百度吴甜:首席AI架构师培养计划持续为行业输送高端复合型AI人才

百度大脑

人工智能 百度

如何选购四屏或多屏炒股电脑主板?

双赞工控

主板定制

iOS 布道者龙神:永远挑战难度值增加 30% 的事情

融云 RongCloud

网络安全界基于知识的识别和映射提出网络空间资源分类明细

郑州埃文科技

Android技术分享| 超简单,给 Android WebRTC增加美颜滤镜功能

anyRTC开发者

android 音视频 WebRTC 移动开发 美颜滤镜

字节跳动技术官珍藏版:MySQL王者进阶手册!面面俱到,太全面了

Java MySQL 数据库 面试 后端

揭开“视频超分”黑科技的神秘面纱

拍乐云Pano

音视频 RTC 视频算法 视频超分

2021云栖大会 | 传统行业如何上链?旺链科技与你面对面畅聊!

旺链科技

区块链 云栖大会

保姆级带你深入阅读NAS-BERT

华为云开发者联盟

推理 预训练模型 BERT NAS论文 NAS搜索

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