2016-07-21 49 views

回答

3

你的方法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的參數版本重載方法。由您決定哪種方式更適合您的情況。

+0

如果沒有爲了測試目的而改變原始代碼,情況會更好。順便說一下,如果不會有任何其他方式,我會接受你的答案作爲最好的答案。 – nyarlathotep108

+0

@ nyarlathotep108還有一個選擇,但它也需要更改原始代碼。看到我更新的答案。 –

+0

@ nyarlathotep108考慮如果您沒有找到更好的解決方案將答案標記爲已接受,或者如果您確實接受了,請與我們分享。 –

6

這是馬爾科的答案的選擇:如果你不想改變你的原代碼,只實現了模擬類助手:

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)); 
+0

這應該是正確的答案。默認參數的全部目的是避免生產代碼中的無關重載方法。 –

相關問題