如何使用 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
};
答案 0 :(得分:9)
这是Marko回答的另一种选择:如果您不想更改原始代码,只需在模拟类中实现帮助:
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));
答案 1 :(得分:2)
更改方法set_enable
的实现以使用辅助方法,如下所示:
void set_enable( bool enabled = true ) { set_enable_impl(enabled); }
现在,在课程MockA
中,为set_enable_impl
创建一个模拟方法:
MOCK_METHOD1( set_enable_impl, void( bool ) );
然后,在您的生产代码中,您只需使用set_enable
,就像在测试中一样,您可以设置对方法set_enable_impl
的期望:
MockA mockA;
EXPECT_CALL(mockA, set_enable_impl(_))...;
另一种方法是通过使用带有一个和零参数的版本来重载方法。您可以自行决定哪种方式更适合您的情况。
答案 2 :(得分:0)
对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 ) );
};