如何使用Google Mock中的可选参数模拟方法?

时间:2016-07-21 09:30:57

标签: c++ mocking googletest googlemock

如何使用 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
};

3 个答案:

答案 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 ) );
};