C++;设置localtime的日期 我在C++ 11中有一段C++代码,使用 LoalTime< /Cuff>函数()来获取时间。如果那天是我的生日,它会返回一条生日信息 std::string message = getDailyMessage();

C++;设置localtime的日期 我在C++ 11中有一段C++代码,使用 LoalTime< /Cuff>函数()来获取时间。如果那天是我的生日,它会返回一条生日信息 std::string message = getDailyMessage();,c++,unit-testing,datetime,C++,Unit Testing,Datetime,我现在想做一个单元测试,确定代码在我生日时输出的值是否正确,而不是在我生日时。是否有一种方法可以通过编程方式在两个相邻调用之前设置localtime返回的值?有没有可能不干扰实际的系统时间 setTime(NOT_BIRTHDAY); EXPECT_STREQ(NOT_BIRTHDAY_MESSAGE, getDailyMessage()); setTime(BIRTHDAY); EXPECT_STREQ(BIRTDAY_MESSAGE, getDailyMessage()); 您可以通过参数

我现在想做一个单元测试,确定代码在我生日时输出的值是否正确,而不是在我生日时。是否有一种方法可以通过编程方式在两个相邻调用之前设置
localtime
返回的值?有没有可能不干扰实际的系统时间

setTime(NOT_BIRTHDAY);
EXPECT_STREQ(NOT_BIRTHDAY_MESSAGE, getDailyMessage());
setTime(BIRTHDAY);
EXPECT_STREQ(BIRTDAY_MESSAGE, getDailyMessage());

您可以通过参数使
getDailMessage
花费时间。这使得单元测试变得轻而易举,并增加了在其他环境中使用它的灵活性。例如,您可以使用它来打印昨天的消息。

总体而言,这是一个很好的建议;不幸的是,这里的设置被简化了,而实际系统的结构使得正在测试的功能需要一个嵌入其中的
localtime
调用。@Steve•这将两件事紧密地结合在一起。这使得单元测试非常困难。将它们分开,单元测试就会容易得多。@Eljay我同意,但结构是为我设置的,所以测试必须保持原样。所以答案是:有没有办法在两个相邻调用之前以编程方式设置localtime返回的值?是,设置实际系统时间。有没有可能不干扰实际的系统时间?如果不从实现中提取localtime,则不会。