![](/img/trans.png)
[英]google mock : how can I “ EXPECT ” that no method will be called on a 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 答案的替代方案:如果您不想更改原始代码,只需在模拟类中实现帮助程序:
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_METHOD1( set_enable_impl, void( bool ) );
然后,在您的生产代码中,您只需set_enable
一样使用set_enable
,而在测试中您可以对方法set_enable_impl
设置期望值:
MockA mockA;
EXPECT_CALL(mockA, set_enable_impl(_))...;
另一种方法是通过具有一个参数和零参数的版本来重载该方法。 由您决定哪种方式更适合您的情况。
对 PiQuer 的回答进行了一些修改。 如果只是将名称“启用”添加到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( ) );
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.