如何模擬一個可選參數的方法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考慮如果您沒有找到更好的解決方案將答案標記爲已接受,或者如果您確實接受了,請與我們分享。 –