如何模拟调试程序的时间流逝?

问题描述 投票:3回答:1

我正在编写一个C ++程序,可以跟踪日期,并保持记录。我想测试和调试这个记录保持功能,但记录本身可以跨越多年;让时间自然地通过以揭露错误需要......一段时间。

有没有一种模拟时间流逝的既定方法,所以我更容易调试这个程序?我正在使用C的ctime库来获取日期。

c++ visual-studio date debugging ctime
1个回答
4
投票

如果您希望系统可测试,您将希望能够替换整个时间引擎。

有许多方法可以替换时间引擎。

最简单的方法是创建一个新的时间引擎单例,复制您正在使用的时间引擎API(在您的情况下,ctime)。

然后清除每次使用基于ctime的API并将它们重定向到您的新时间引擎。

这个新时间引擎可以配置为使用ctime或其他东西。

为了更可靠,您甚至想要更改与旧API交互使用的任何数据结构的二进制布局和类型,审核将事物转换为void指针或重新解释转换它们的每种情况,等等。


另一种方法是依赖注入,而不是使用单例,而是将时间引擎作为参数传递给程序。程序中需要访问时间的每个部分现在要么存储指向时间引擎的指针,要么将其作为函数参数。


现在您可以随时控制,可以安排它更快地通过,跳转等等。根据您的系统,您可能希望在时间的推移上或多或少地真实,并且它可能暴露出不同的真实和非真实的错误。

即使您完成了所有这些操作,也无法确定您的程序没有时间错误。您可以以您不期望的方式与OS时间进行交互。但你至少可以解决其中的一些问题。

© www.soinside.com 2019 - 2024. All rights reserved.