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

原文由 nyarlathotep108 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 585
2 个回答

这是 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));

原文由 PiQuer 发布,翻译遵循 CC BY-SA 4.0 许可协议

更改方法的实现 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(_))...;

另一种方法是通过使用带有一个和零参数的版本来重载该方法。由您决定哪种方式更适合您的情况。

原文由 Marko Popovic 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题