首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Google Mock模拟gettimeofday()

如何使用Google Mock模拟gettimeofday()
EN

Stack Overflow用户
提问于 2020-07-15 15:41:44
回答 1查看 82关注 0票数 0

我正在为我的C++应用程序进行单元测试。我的单元测试用例调用的方法之一是gettimeofday()。目前,我有一个mockclass.cpp,我在其中添加了我模拟的gettimeofday,如下所示:

mockclass.cpp:

代码语言:javascript
复制
namespace speed{
    int mock_gettimeofday(struct timeval *tv, struct timezone *tz){
        return 12345678;
    }
}

realcode.cpp:

代码语言:javascript
复制
namespace speed{
    static void A(){
        struct timeval tp;
        gettimeofday(&tp, NULL);
    }
}

我指的是这个website来解决这个问题。目前,即使我尝试了网站上的链接,它仍然使用真正的gettimeofday(),而不是我模拟的gettimeofday()。我使用的是网站上提到的命名空间方法。

EN

回答 1

Stack Overflow用户

发布于 2020-07-15 18:06:35

您应该在两个不同的转换单元中实现两个不同的myproject::gettimeofday函数(并在生产代码中显式使用myproject::gettimeofday(tv, tz); ):

生产实施(例如production_time.cpp):

代码语言:javascript
复制
namespace myproject
{
int gettimeofday(struct timeval *tv, struct timezone *tz)
{
  return ::gettimeofday(tv, tz);
}
}

测试实现(例如testing_time.cpp):

代码语言:javascript
复制
namespace myproject
{
int gettimeofday(struct timeval*, struct timezone*)
{
  return 12345678;
}
}

然后,您可以在其中创建一些共享/静态库,并且可以将您的项目与生产或测试实现相链接。我不知道您使用的是哪种构建系统,但就CMake而言,它可能是这样的:

代码语言:javascript
复制
add_library(MyProject <sources>)
add_library(ProductionTimeUtils production_time.cpp)
add_library(TestingTimeUtils testing_time.cpp)
add_executable(main main.cpp)
add_executable(test test.cpp)
target_link_libraries(main MyProject ProductionTimeUtils)
target_link_libraries(test MyProject TestingTimeUtils)

或者,您可以创建一个接口

代码语言:javascript
复制
class MyTimeUtils
{
public:
  virtual ~MyTimeUtils() = default;
  virtual int gettimeofday(struct timeval *tv, struct timezone *tz) = 0;
};

并将其作为依赖注入到您的生产类中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62909876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档