如何在 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
};
更改方法的实现 set_enable
以使用辅助方法,如下所示:
void set_enable( bool enabled = true ) { set_enable_impl(enabled); }
现在,在 class 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(_))...;
另一种方法是通过具有一个和零参数的版本来重载该方法。哪种方式更适合您的情况由您决定。
这是 Marko 回答的另一种选择:如果您不想更改原始代码,只需在 mock class:
中实现帮助程序
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));
对 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( ) );
};
如何在 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
};
更改方法的实现 set_enable
以使用辅助方法,如下所示:
void set_enable( bool enabled = true ) { set_enable_impl(enabled); }
现在,在 class 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(_))...;
另一种方法是通过具有一个和零参数的版本来重载该方法。哪种方式更适合您的情况由您决定。
这是 Marko 回答的另一种选择:如果您不想更改原始代码,只需在 mock class:
中实现帮助程序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));
对 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( ) );
};