回答

收藏

有没有一种简单的方法可以在测试期间全局排除 time.Now() ?

技术问答 技术问答 123 人阅读 | 0 人回复 | 2023-09-11

我们的一些代码对时间敏感。我们需要能够保留一些东西,然后在 30-我们可以在60 秒内释放它,等等。time.Sleep(60 * time.Second); N3 P$ x; n8 G9 r7 v* g; }
我刚刚实现了时间接口,并在测试期间使用了时间接口的存根,类似于这个 golang-nuts 讨论。
" L9 _3 @% f+ s, ]8 {3 G然而,time.Now()在多个站点被调用,这意味着我们需要传递一个变量来跟踪我们实际睡了多久。
- Z) s. |: r: ~) z我想知道是否有另一种方法可以知道time.Now()全球范围内进行存根。也许进行系统调用来更改系统时钟?
6 C: s0 h$ q, R6 x! q& ]也许我们可以写自己的时间包,它基本上围绕着时间包,但允许我们更改它?
* ]0 m- w( W% K# L' g+ d我们目前的实现效果很好。我是初学者。我想知道是否有其他想法?1 N0 G6 ]& e1 j8 H% `
                                                                ' Y0 i; k% a% d! p/ \4 p8 b8 r5 L
    解决方案:                                                                9 F3 ?- s# M) g( X( K8 L
                                                                通过实施自定义界面,您已经走上了正确的道路。我想你用了你发布的 golang 坚果线程中的以下建议:
) O5 f2 g. J2 q  V: x/ \6 {: U  S[code]type Clock interface {  Now() time.Time  After(d time.Duration) 提供具体实现" M! {( g. M! u! o
[code]type realClock struct{}func (realClock) Now() time.Time { return time.Now() }func (realClock) After(d time.Duration) 测试实现。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则