如何使用Google Mock来模拟gettimeofday()
How to use Google Mock to mock gettimeofday()
我正在为我的C++应用程序进行单元测试。我的单元测试用例调用的方法之一是gettimeofday()
。目前,我有一个mockclass.cpp,我在其中添加了我的模拟gettimeofday,如下所示:
mockclass.cpp:
namespace speed{
int mock_gettimeofday(struct timeval *tv, struct timezone *tz){
return 12345678;
}
}
realcode.cpp:
namespace speed{
static void A(){
struct timeval tp;
gettimeofday(&tp, NULL);
}
}
我参考这个网站是为了解决这个问题。目前,即使我尝试了网站上的链接,它仍然使用真实的gettimeofday()
,而不是我嘲笑的gettimeofday()
。我正在使用网站上提到的名称空间方法。
您应该在两个不同的翻译单元中实现两个不同myproject::gettimeofday
函数(并在生产代码中明确使用myproject::gettimeofday(tv, tz);
(:
生产实施(例如production_time.cpp
(:
namespace myproject
{
int gettimeofday(struct timeval *tv, struct timezone *tz)
{
return ::gettimeofday(tv, tz);
}
}
测试实现(例如testing_time.cpp
(:
namespace myproject
{
int gettimeofday(struct timeval*, struct timezone*)
{
return 12345678;
}
}
然后,您可以用它创建一些共享/静态库,并将您的项目与生产或测试实现链接起来。我不知道你使用什么样的构建系统,但就CMake而言,它可能看起来像这样:
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)
或者,您可以创建一个界面
class MyTimeUtils
{
public:
virtual ~MyTimeUtils() = default;
virtual int gettimeofday(struct timeval *tv, struct timezone *tz) = 0;
};
并将其作为对生产类的依赖项注入。
相关文章:
- 如何使用Google Mock来模拟gettimeofday()
- G锁定铸造到基础上会释放模拟行为
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 落砂模拟碰撞检测C++和SFML
- 在gtest.中使用fff.h模拟系统API
- 谷歌模拟和覆盖关键字
- 用C#中的并集模拟C++嵌套结构
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- 如何模拟不同边数的骰子滚动?
- 模拟持久按键
- 使用SIR模型的疾病爆发模拟
- 在 c++ 中模拟输入并在 JAVA 中读取它?
- 转发变量参数列表以模拟 std::thread
- 如何在谷歌模拟中匹配 C 样式数组
- 如何使用兰德随机化模拟点击
- 模拟GPS数据,以便使用Qt与Traccar一起使用
- QKeyPress - 在Qt中模拟按键
- 如何使用不同的谷歌模拟运行相同的谷歌测试用例?