【发布时间】:2021-03-02 03:00:43
【问题描述】:
我想自动化一些测试,我必须操纵系统时间来检查用 golang 编写的程序的身份验证行为。根据this post,libfaketime 不适用于 golang。还有另一种方法可以实现我想用 libfaketime 做的事情吗?
这是 libfaketime 在 github 上所做的说明。
libfaketime 拦截程序用于检索的各种系统调用 当前日期和时间。然后它报告修改(伪造)的日期和时间(如 由您(用户)指定)到这些程序。这意味着您可以修改 程序看到的系统时间,而无需更改系统范围内的时间。
【问题讨论】:
-
正如how it was done for the Go playground 所见,在 Go 中伪造时间并非易事。您可能会考虑将您的设计更改为更具可测试性,以便它接受
time.Time而不是在内部使用time.Now()。 -
这意味着我将无法在外部调用程序和操作时间?我的测试框架是用 Java 编写的,即使我将源代码更改为接受
time.Time,我也无法从 Java 中对其进行测试。 -
正确。如果您尝试对根据系统时钟改变其输出的二进制文件进行黑盒测试(以某种方式您不能完全忽视),那将非常非常困难。也许您可以在虚拟机中运行它,您可以在其中以某种方式操纵虚拟硬件时钟。
标签: testing go operating-system