有没有一种简单的方法可以在测试期间全局排除 time.Now() ?
技术问答
229 人阅读
|
0 人回复
|
2023-09-11
|
我们的一些代码对时间敏感。我们需要能够保留一些东西,然后在 30-我们可以在60 秒内释放它,等等。time.Sleep(60 * time.Second)
& B- U+ x3 K1 Q4 X3 P, G8 C7 ?4 @我刚刚实现了时间接口,并在测试期间使用了时间接口的存根,类似于这个 golang-nuts 讨论。
1 g% Z4 M, N; c* Q# P ~. J然而,time.Now()在多个站点被调用,这意味着我们需要传递一个变量来跟踪我们实际睡了多久。# t& S( h/ Q0 C! t( p' x
我想知道是否有另一种方法可以知道time.Now()全球范围内进行存根。也许进行系统调用来更改系统时钟?& M- B+ }3 {" q/ x% B+ s
也许我们可以写自己的时间包,它基本上围绕着时间包,但允许我们更改它?
( I2 r' R5 K9 U% Z' j7 m$ M我们目前的实现效果很好。我是初学者。我想知道是否有其他想法?
* U+ ~' z' E# z, Y' J2 y4 x' Y & A1 x! ]: T% i% u: M0 T, L: J
解决方案: 4 L- ^) p5 c! `1 F# }
通过实施自定义界面,您已经走上了正确的道路。我想你用了你发布的 golang 坚果线程中的以下建议:0 {" m( T; r; w" ~6 ]. q- n7 y
[code]type Clock interface { Now() time.Time After(d time.Duration) 提供具体实现
# }5 q a/ [; ]- }. o7 k4 D[code]type realClock struct{}func (realClock) Now() time.Time { return time.Now() }func (realClock) After(d time.Duration) 测试实现。 |
|
|
|
|
|