我正在编写一个C ++程序,可以记录日期,并记录日期。我想测试和调试这个记录保持功能,但记录本身可以跨越多年;让时间自然地通过来揭露错误需要一段时间。
有没有一种模拟时间流逝的既定方法,所以我更容易调试这个程序?我正在使用C&#39 ctime
库来获取日期。
答案 0 :(得分:4)
如果您希望系统可测试,您将希望能够替换整个时间引擎。
有多种方法可以替换时间引擎。
最简单的方法是创建一个新的时间引擎单例,复制您正在使用的时间引擎API(在您的情况下为@Start "" /D"%~dp0" "%__AppDir__%RoboCopy.exe" . .\test "%~nx0"
)。
然后扫出每次使用基于ctime
的API并将其重定向到新的时间引擎。
可以将此新时间引擎配置为使用ctime
或其他内容。
为了更可靠,您甚至想要更改与旧API交互使用的任何数据结构的二进制布局和类型,审核将事物转换为void指针或重新解释转换它们的每种情况,等等。
另一种方法是依赖注入,而不是使用单例,而是将时间引擎作为参数传递给程序。现在需要访问时间的程序的每个部分都存储一个指向时间引擎的指针,或者将其作为函数参数。
现在您可以控制时间,您可以安排它更快地通过,跳转等等。根据您的系统,您可能希望在时间的推移上或多或少现实,它可能会暴露不同的真实而不是真正的错误。
即使您完成所有之后,也无法确定您的程序没有时间错误。您可以以您不期望的方式与OS时间进行交互。但你至少可以解决其中的一些问题。