写点什么

使用 jonboulle/clockwork 包 mock 时间

作者:fliter
  • 2024-02-01
    上海
  • 本文字数:793 字

    阅读完需:约 3 分钟

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


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



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


在线代码执行


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)}
复制代码


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


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


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


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


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


<br>


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


kubectl:


pkg/cmd/apply/patcher.go#L70


pkg/cmd/diff/diff.go#L400


etcd:


etcd/server/etcdserver/api/v3compactor/compactor.go


etcd/server/etcdserver/api/v3compactor/revision_test.go

用户头像

fliter

关注

www.dashen.tech 2018-06-21 加入

Software Engineer. Focus on Micro Service,Containerization

评论

发布
暂无评论
使用jonboulle/clockwork包mock时间_fliter_InfoQ写作社区