php小编百草为您介绍一种名为gocron的函数,它是一个标准库实现,具备可测试的特性。gocron函数的设计目的是为了提供一种简便的方式来创建和管理定时任务。它可以帮助开发人员轻松地编写和调度多个定时任务,同时还提供了灵活的测试功能,方便开发人员进行单元测试和功能验证。无论是在开发环境还是生产环境,gocron函数都是一个强大而可靠的工具,可用于实现各种复杂的定时任务需求。
我需要按一定的时间间隔运行作业(点击休息端点,然后将消息发送到队列)。目前我有这个功能,它使用 gocron - https://github.com/go-co-op/gocron
但是目前没有停止该功能的机制,因此我无法干净地测试它。
func RunSchedule(cronExpression string, myFunction func()) error { scheduler := gocron.NewScheduler(time.UTC) _, err := scheduler.Cron(cronExpression).StartImmediately().Do(myFunction) if err != nil { return err } scheduler.StartBlocking() return nil }
它按要求执行,并以所需的时间间隔运行参数化函数,但我确信必须有一个更清晰的解决方案 - 可能是标准库。
您可以只返回 .stop
函数:
func runschedule(cronexpression string, myfunction func()) (stop func(), err error) { scheduler := gocron.newscheduler(time.utc) _, err = scheduler.cron(cronexpression).startimmediately().do(myfunction) if err != nil { return nil, err } go func() { scheduler.startblocking() }() return scheduler.stop, nil }
然后在您的测试中您可以执行以下操作:
called := 0 stop, err := RunSchedule("some-schedule", func() { called++ }) time.Sleep(time.Second * 1) // whatever you need to do stop() if called != 1 { t.Fail("called should be 1") }
以上是gocron函数的标准库实现(可测试)的详细内容。更多信息请关注PHP中文网其他相关文章!