如何在Google mock中使用可选参数模拟方法
How to mock method with optional parameter in Google Mock?
如何在Google mock中用可选参数模拟方法?例如:
class A
{
public:
void set_enable( bool enabled = true );
};
class MockA : public A
{
MOCK_METHOD1( set_enable, void( bool ) ); // this is not working
};
这是Marko答案的替代方案:如果你不想更改原始代码,只需在mock类中实现helper:
class A
{
public:
virtual void set_enable( bool enabled = true );
};
class MockA : public A
{
MOCK_METHOD1( set_enable_impl, void( bool ) );
virtual void set_enable( bool enabled = true )
{
set_enable_impl( enabled );
}
};
在测试中仍然需要调用set_enable_impl
,例如
MockA mockA;
EXPECT_CALL(mockA, set_enable_impl(true)).Times(Exactly(1));
EXPECT_CALL(mockA, set_enable_impl(false)).Times(Exactly(1));
将方法set_enable
的实现更改为使用辅助方法,如下所示:
void set_enable( bool enabled = true ) { set_enable_impl(enabled); }
现在,在类MockA
中,为set_enable_impl
:创建一个mock方法
MOCK_METHOD1( set_enable_impl, void( bool ) );
然后,在您的生产代码中,您只需像最初一样使用set_enable
,而在测试中,您可以设置对方法set_enable_impl
:的期望
MockA mockA;
EXPECT_CALL(mockA, set_enable_impl(_))...;
另一种选择是通过具有一个和零个参数的版本来重载该方法。由您决定哪种方式更适合您的情况。
对PiQuer答案的一些修改。如果只将名称"enabled"添加到MOCK_METHOD1
中bool类型的变量中,则不需要包装器,如下所示:
class A
{
public:
void set_enable( bool enabled = true );
};
class MockA : public A
{
MOCK_METHOD1( set_enable, void( bool enabled ) );
};
设置两个模拟,如下所示:
class MockA : public A
{
MOCK_METHOD1( set_enable, void( bool ) );
MOCK_METHOD1( set_enable, void( ) );
};
相关文章:
- 转发变量参数列表以模拟 std::thread
- 使用聚合初始化模拟默认函数参数是否存在任何陷阱?
- EXPECT_CALL具有 unique_ptr 引用类型参数的模拟函数
- 如何使用(GoogleMock)模拟类作为模板参数
- GoogleMock:如何保存参数,以便在模拟上的下一次调用中使用
- 将模板函数声明为非模拟函数的参数
- 用参数作为指针的模拟功能
- 如何检查谷歌模拟中作为空指针传递的字符串参数
- 使用 gmock 返回模拟方法参数
- 使用谷歌模拟测试C++时无法推断模板参数
- 为什么我们不能在模板专业化的开始/中间使用可变参数模板(以及如何模拟)?
- 模拟一个具有双重指针作为参数的函数
- Google模拟:如何在模拟参数中从指针中复制内存
- 如何在可变参数函数中模拟褶皱表达式
- gtest-将模拟函数参数分配()
- 如何重复模拟相同的功能并检查每个调用中的参数
- 如何在模拟期望中调用const std::function<>&参数?
- 如何基于作为 STL 容器的模板参数模拟所选成员函数的部分专用化
- 如何用指针参数模拟方法
- 如何在Google mock中使用可选参数模拟方法