繁体   English   中英

如何在 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 答案的替代方案:如果您不想更改原始代码,只需在模拟类中实现帮助程序:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM