首页 >后端开发 >Golang >如何有效地全局存根'time.Now()”进行测试?

如何有效地全局存根'time.Now()”进行测试?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-22 10:37:59427浏览

How Can I Effectively Stub `time.Now()` Globally for Testing?

时间的全局存根。Now()

在测试中,控制代码的时间相关方面变得至关重要。然而,由于在多个代码段中广泛使用,全局删除 time.Now() 可能具有挑战性。

建议方法:自定义时间接口

当前的实现使用自定义界面是一个有效的解决方案。以下是该方法的摘要:

  1. 使用方法 Now() 和 After(d time.Duration) 定义一个 Clock 接口。
  2. 创建一个具体的实现(例如 realClock)行为类似于标准时间包。
  3. 创建一个用于测试的模拟实现(例如,

替代方案

强烈建议不要在测试期间更改系统时钟,因为它可能会导致不可预见的依赖关系。

限制

存根time.Now() 在全球范围内都有其局限性。例如,如果被测代码使用依赖系统时间的第三方库,则可能无法覆盖其行为。

无状态代码的好处

设计具有尽可能少的有状态的代码可以简化测试并促进并发性。通过将功能分离为可测试的无状态组件,可以更轻松地在测试期间控制时间敏感的方面。

以上是如何有效地全局存根'time.Now()”进行测试?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn