如何模拟一个可选参数的方法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
};
如何模拟一个可选参数的方法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); }
,在MockA
类,创建set_enable_impl
一个模拟方法:
MOCK_METHOD1(set_enable_impl, void(bool));
然后,在您的生产代码中,您只需使用set_enable
,就像您在第一个地方一样,而在测试中您可以上方法set_enable_impl
n设置的期望:
MockA mockA;
EXPECT_CALL(mockA, set_enable_impl(_))...;
另一种方法是通过使具有1点0的参数版本重载方法。由您决定哪种方式更适合您的情况。
这是马尔科的答案的选择:如果你不想改变你的原代码,只实现了模拟类助手:
class A
{
public:
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));
这应该是正确的答案。默认参数的全部目的是避免生产代码中的无关重载方法。 –
如果没有为了测试目的而改变原始代码,情况会更好。顺便说一下,如果不会有任何其他方式,我会接受你的答案作为最好的答案。 – nyarlathotep108
@ nyarlathotep108还有一个选择,但它也需要更改原始代码。看到我更新的答案。 –
@ nyarlathotep108考虑如果您没有找到更好的解决方案将答案标记为已接受,或者如果您确实接受了,请与我们分享。 –