2
考慮下測試這個類:如何嘲笑類方法與測試下谷歌測試
class A
{
public:
bool isTrue();
void doSomething();
};
我想測試doSomething
這就要求在其實施isTrue
。
但我也想設置isTrue
方法的期望值。 有沒有谷歌測試的最佳做法如何可以模擬被測試的類的方法?
考慮下測試這個類:如何嘲笑類方法與測試下谷歌測試
class A
{
public:
bool isTrue();
void doSomething();
};
我想測試doSomething
這就要求在其實施isTrue
。
但我也想設置isTrue
方法的期望值。 有沒有谷歌測試的最佳做法如何可以模擬被測試的類的方法?
談到我的意見爲答案...
有一個小黑客就可以使用。定義一個派生類,像這樣:
class B : public A {
public:
MOCK_METHOD0(isTrue, bool());
using A::doSomething;
};
這顯然只有當isTrue
是virtual
工作。
當心:請檢查貴公司有關「專門用於測試的代碼」的測試指南,而不是測試真實的代碼。在你的情況下(遺留代碼庫),這可能是好的。
你可以從A類派生:class B:public A,public Mock {using A :: doSomething; MOCK_METHOD0(isTrue,bool()); };',但我認爲如果你需要模擬被測試的類的方法,你的類設計就會被破壞。 – arne
是的,它的遺留代碼,我也不喜歡嘲笑被測試的類的自己的方法。 – Juergen
@arne非常漂亮的把戲。但是你不需要'在類B中使用Mock :: isTrue',而不是在B中定義它?如果您在B類中定義了方法,那麼從Mock繼承的意義何在? –