我正在使用Google测试和C++进行单元测试。在我们公司的代码中,我们仍然存在一个问题,即系统数据类型(例如CTime)使用实际系统的时区(我们与生产代码中的使用方式相同)。为了进行单元测试,我们希望模拟不同的时区,因为我们遇到了许多问题。
我已经花费数小时研究其他人如何解决此问题,因为其他公司肯定也会遇到这个问题:) 但我没有找到解决方案。我的想法是这样的:CTime本身将时间保存为UTC,并按需转换为本地时间。我假设所有这些函数都需要GetTimeZoneInformation()功能,该功能在timezonapi.h中声明。
所以解决方案可能是通过一个定制的函数来替换GetTimeZoneInformation()功能,然后返回一个对象,我可以随时更改。但我不知道如何做到这一点,也不知道这是否有效,因为它可能只在应用程序启动时调用此函数一次。
有人知道如何处理这个问题吗?我不想改变任何行为,我只想能够设置自己的时区,而不破坏任何时间计算机制。最好的方法是如果我可以在不改变生产代码的情况下模拟这些调用。
问题是这个程序非常庞大、古老,而且...尽可能少地更改总是最好的 :)
如果我没有找到已经存在的解决我的问题的帖子,那么我很抱歉,因为我要么没有找到它,要么我没有意识到这可以帮助我。
我已经花费数小时研究其他人如何解决此问题,因为其他公司肯定也会遇到这个问题:) 但我没有找到解决方案。我的想法是这样的:CTime本身将时间保存为UTC,并按需转换为本地时间。我假设所有这些函数都需要GetTimeZoneInformation()功能,该功能在timezonapi.h中声明。
WINBASEAPI
_Success_(return != TIME_ZONE_ID_INVALID)
DWORD
WINAPI
GetTimeZoneInformation(_Out_ LPTIME_ZONE_INFORMATION lpTimeZoneInformation);
所以解决方案可能是通过一个定制的函数来替换GetTimeZoneInformation()功能,然后返回一个对象,我可以随时更改。但我不知道如何做到这一点,也不知道这是否有效,因为它可能只在应用程序启动时调用此函数一次。
有人知道如何处理这个问题吗?我不想改变任何行为,我只想能够设置自己的时区,而不破坏任何时间计算机制。最好的方法是如果我可以在不改变生产代码的情况下模拟这些调用。
问题是这个程序非常庞大、古老,而且...尽可能少地更改总是最好的 :)
如果我没有找到已经存在的解决我的问题的帖子,那么我很抱歉,因为我要么没有找到它,要么我没有意识到这可以帮助我。