前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用jonboulle/clockwork包mock时间

使用jonboulle/clockwork包mock时间

作者头像
fliter
发布2024-02-26 15:43:29
870
发布2024-02-26 15:43:29
举报
文章被收录于专栏:旅途散记

Clockwork[1] 是一个 Go 语言编写的用于处理时间相关操作的库。

其提供了对时间的模拟和操作功能,适用于需要在测试中控制时间流逝的场景。

下面是一个简单的示例,演示如何使用 Clockwork 进行时间模拟:

在线代码执行[2]

代码语言:javascript
复制
package main

import (
 "fmt"
 "time"

 "github.com/jonboulle/clockwork"
)

func main() {
 // 创建 Clockwork 实例
 fakeClock := clockwork.NewFakeClock()

 // 使用模拟时间
 now := fakeClock.Now()
 fmt.Println("Current time:", now)

 // 模拟时间流逝(模拟过了两个小时)
 fakeClock.Advance(2 * time.Hour)

 // 获取更新后的时间
 updatedTime := fakeClock.Now()
 fmt.Println("Updated time:", updatedTime)

 // 比较updatedTime是否在now之后
 isAfter := updatedTime.After(now)
 fmt.Println("Is updated time after current time:", isAfter)
}

运行以上代码,输出如下:

代码语言:javascript
复制
Current time: 2023-05-19 18:37:30.167661 +0800 CST m=+0.000150751
Updated time: 2023-05-19 20:37:30.167661 +0800 CST m=+7200.000150751
Is updated time after current time: true

上面示例创建了一个 FakeClock 实例,使用clockwork来模拟时间。通过调用 Advance 方法,模拟了时间流逝,然后比较了更新后的时间与当前时间的关系(在测试中,这种时间模拟的能力是非常有用的,可以方便地控制测试用例中的时间行为)。

综上,可以在测试中更轻松地控制时间相关的行为,如定时任务、超时等(时间模拟 ),可以有效解决测试中时间相关问题, 很好地控制时间,隔离代码中的时间依赖,实现可重复的测试。

还提供了方便的时间操作方法,如增加、减少、比较等(方便的时间操作 )。

在很多项目中都有使用,如

kubectl:

pkg/cmd/apply/patcher.go#L70[3]

pkg/cmd/diff/diff.go#L400[4]

etcd:

etcd/server/etcdserver/api/v3compactor/compactor.go[5]

etcd/server/etcdserver/api/v3compactor/revision_test.go[6]

参考资料

[1]

Clockwork: https://github.com/jonboulle/clockwork

[2]

在线代码执行: https://go.dev/play/p/W4njJJBh6-4

[3]

pkg/cmd/apply/patcher.go#L70: https://github.com/kubernetes/kubectl/blob/master/pkg/cmd/apply/patcher.go#L70

[4]

pkg/cmd/diff/diff.go#L400: https://github.com/kubernetes/kubectl/blob/master/pkg/cmd/diff/diff.go#L400

[5]

etcd/server/etcdserver/api/v3compactor/compactor.go: https://github.com/etcd-io/etcd/blob/main/server/etcdserver/api/v3compactor/compactor.go#L67

[6]

etcd/server/etcdserver/api/v3compactor/revision_test.go: https://github.com/etcd-io/etcd/blob/main/server/etcdserver/api/v3compactor/revision_test.go#L30

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

本文分享自 旅途散记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档