Unit testing 递增Lua中的os.clock()
摘要:我能让时间(看起来)在我的脚本中流逝而不忙着等待吗?使用Unit testing 递增Lua中的os.clock(),unit-testing,lua,sleep,Unit Testing,Lua,Sleep,摘要:我能让时间(看起来)在我的脚本中流逝而不忙着等待吗?使用os.execute('sleep 1')并不能减少它(而且浪费时间) 详细信息 我有一个在特定时间间隔后工作的。目前,我通过在时间排序列表中插入一个表来安排这项工作。大致: localdelayedwork={} 功能handleLater(数据,延迟秒) 本地delayedItem={data=data,execTime=os.clock()+delaySeconds} 局部i=1 对于_,存在于ipairs(延迟工作)do中 如
os.execute('sleep 1')
并不能减少它(而且浪费时间)
详细信息我有一个在特定时间间隔后工作的。目前,我通过在时间排序列表中插入一个表来安排这项工作。大致:
localdelayedwork={}
功能handleLater(数据,延迟秒)
本地delayedItem={data=data,execTime=os.clock()+delaySeconds}
局部i=1
对于_,存在于ipairs(延迟工作)do中
如果existing.execTime>delayedItem.execTime,则中断else i=i+1 end
结束
表.插入(delayedWork,i,delayedItem)
结束
后来我定期检查要做的工作。大致:
函数processDelayedWork()
本地i,最后一个=1,#延迟工作
而我保罗已经回答了这个问题:制作os.clock
返回你需要的任何东西
我正在添加一个实现,它允许您根据os.clock
控制时间流逝的速度
do
local realclock = os.clock
local lasttime = realclock()
local faketime = lasttime
local clockMultiplier = 1
function setClockMultiplier(multiplier)
clockMultiplier = multiplier
end
function adjustTime(offsetAmount)
faketime = faketime + offsetAmount
end
function os.clock()
local now = realclock()
adjustTime((now - lasttime) * clockMultiplier)
lasttime = now
return faketime
end
end
您现在可以调用setClockMultiplier
来自由地减慢或加快时间的流逝,如os.clock
所报告的那样。您可以调用adjustTime
来提前或延迟任意数量的时钟。为什么不编写自己的时钟函数来实现您想要的功能
do
local clock = os.clock
local increment = 0
os.clock = function(inc)
increment = increment + (inc or 0)
return clock()+increment
end
end
print(os.clock())
os.clock(1)
print(os.clock())
这将打印0.001 1.001
或类似内容。“这不是浪费时间的全部原因吗?”,不。如果我可以让脚本认为5秒已经过去并从那一刻开始继续,我不希望每次单元测试都要等待5秒。修改运行时只是为了让单元测试更容易一点似乎有点奇怪。很遗憾,没有更好的解决方案,但是你得到了这个好主意的认可。