如何为秒表编写单元测试?

时间:2011-10-21 12:42:35

标签: c++ windows unit-testing time

我有一个班级来衡量调用StartStop之间的时间。我创建了一个单元测试,在boost::this_thread::sleepStart之间使用Stop进行休眠,并测试结果是否接近睡眠时间。

但是,此测试在我们的构建代理上失败,但在我们的开发机器上失败。问题是:我如何知道这是否是秒表的实际问题,或者如果构建代理(运行其他进程,作为虚拟机)可能比我告诉它的时间更长,这是一个“问题”?

所以问题是:是否有一种强有力的方法可以写出“做一些需要x秒的事情?”

非常感谢!

4 个答案:

答案 0 :(得分:7)

没有办法在非实时系统上可靠地测试这样的东西。要做的就是包装API以获取秒表使用的系统时间并在测试中模拟它们。

答案 1 :(得分:1)

这取决于您使用的操作系统。在支持多程序设计的系统上,线程的运行时间不确定。但是,在某些实时系统中,如果您的线程是最重要的,那么它几乎是准确的。您应该能够禁用中断来模拟这种情况,因为您的线程不会被OS调度程序抢占。

答案 2 :(得分:1)

在睡眠前后取系统时间,仅参考这些时间之间的差异而不是睡觉时间。

答案 3 :(得分:1)

秒表的分辨率是多少?如果您需要精确到几秒钟,那么睡眠3秒钟,看看你是否在2.9和3.1之间将适合你。如果您需要mili / nano秒精度,您应该使用第一个回复中建议的时间戳模拟。