简单但粗略的选择是“抽象掉”墙上时间检索逻辑。
比如说,使用WallTime
带有GetTime
方法的类并在整个应用程序中使用它。
这个类可以使用两个时间“提供者”。一是系统中的RT时钟。
另一个只是从预先记录的列表中返回值。
您记录第一次通过算法并存储返回的值GetTime
。这些值将形成第二个“时间提供者”的“预先记录”值列表。
假设第二次运行将以GetTime
完全相同的顺序调用,您可以简单地返回与第一次运行相同的时间值:)
如果您想调整一些时间,您也可以编辑列表。您还可以有多个存储列表,以模拟不同的硬件。
例子:
假设算法是这样工作的:
GetTime
-> 从时钟返回 T1
- 调用函数 X
GetTime
-> 从时钟返回 T2
Y
根据 (T2 - T1)决定接下来要调用的函数(例如)
GetTime
-> 从时钟返回 T3
- 调用函数
Y
GetTime
-> 从时钟返回 T4 ...
将 T1、T2、T3 和 T4 保存在列表中后,您可以准确地重播上述运行(关于返回的值GetTime
)。
如果在第 6 步执行的函数(这是您的算法根据性能选择的函数)在第二次运行中不同,即使 (T2 - T1) 时间差相同,则此解决方案将失败,即取决于在一个可变的、非时间相关的参数上。