gpt4 book ai didi

c++ - 如何使用 Google Mock 模拟具有虚拟和非虚拟方法的类?

转载 作者:可可西里 更新时间:2023-11-01 18:36:53 25 4
gpt4 key购买 nike

我有一个类,我想使用 Google Mock 来模拟。我的类(class)有非虚方法和虚方法。我一直在阅读 Google Mock ForDummiesGoogle Mock CookBook .这些资源提供的示例和解释提到了具有所有虚函数或没有虚函数的类,但没有提到两者都具有的类。所以我有两个问题:

(1) 是否可以模拟具有混合虚拟/非虚拟类型的类?

(2) mock这个类应该用什么方法(如果问题1为真), (如果问题 1 为假)可以用什么代替?

一些代码如果有帮助的话:

class Time_Device : public Time_Device_Interface
{
private:
...
bool read32_irig_data( uint32_t *data_read, uint32_t reg_address);
bool thread_monitor_irig_changed( irig_callback_t callback );
public:
...
virtual bool set_time( struct time_sample const &time );
virtual bool get_time( struct time_sample *time );
virtual bool register_is_connected_notification(
irig_callback_t callback );
};

一点背景:

我正在尝试将 Google Mock 与 Google Test 结合使用,因为我需要在很多方法中模拟硬件返回以测试覆盖率等。我已经能够单独使用 Google Test 成功地测试一些我的方法没有模拟它们。

我正在使用 Visual Studio 2010、CMake 进行开发

我是 Google Test 和 Google Mock 的新手

我无法更改生产代码。

最佳答案

(1) Is it possible to mock a class with mixed virtual/non-virtual types?

是的,是的,但是你必须要小心。在模拟类中,仅覆盖虚拟方法。

模拟应该是这样的:

struct Time_Device_Mock : public Time_Device_Interface
{
MOCK_CONST_METHOD1( set_time, bool(time_sample const &) );
MOCK_CONST_METHOD1( get_time, bool(time_sample *) );
MOCK_CONST_METHOD1( register_is_connected_notification, bool(irig_callback_t) );
};

(2) What method should be used (if question 1 is true) to mock this class, (If question 1 is false) what could be used instead?

这个问题有点奇怪。你说非虚拟方法是私有(private)的,因此你不能访问它们。这只剩下使用虚拟方法的选项。

这意味着,创建模拟类的实例,并将其传递给应该使用它的对象。该方法称为 dependency injection , 并且有几种注入(inject)依赖的方法。

关于c++ - 如何使用 Google Mock 模拟具有虚拟和非虚拟方法的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25089004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com