2013-11-22 173 views
2

考慮下測試這個類:如何嘲笑類方法與測試下谷歌測試

class A 
{ 
public: 
    bool isTrue(); 
    void doSomething(); 
}; 

我想測試doSomething這就要求在其實施isTrue

但我也想設置isTrue方法的期望值。 有沒有谷歌測試的最佳做法如何可以模擬被測試的類的方法?

+2

你可以從A類派生:class B:public A,public Mock {using A :: doSomething; MOCK_METHOD0(isTrue,bool()); };',但我認爲如果你需要模擬被測試的類的方法,你的類設計就會被破壞。 – arne

+1

是的,它的遺留代碼,我也不喜歡嘲笑被測試的類的自己的方法。 – Juergen

+0

@arne非常漂亮的把戲。但是你不需要'在類B中使用Mock :: isTrue',而不是在B中定義它?如果您在B類中定義了方法,那麼從Mock繼承的意義何在? –

回答

4

談到我的意見爲答案...

有一個小黑客就可以使用。定義一個派生類,像這樣:

class B : public A { 
public: 
    MOCK_METHOD0(isTrue, bool()); 

    using A::doSomething; 
}; 

這顯然只有當isTruevirtual工作。

當心:請檢查貴公司有關「專門用於測試的代碼」的測試指南,而不是測試真實的代碼。在你的情況下(遺留代碼庫),這可能是好的。