2017-08-11 63 views
0

我已經測試了Google Mock的virtual函數,但無法爲non-virtual執行此操作。我不明白「hi-perf依賴注入」的概念。谷歌模擬非虛擬函數的類

以下是具有一個non-virtual函數的類。我想用Google Mock來測試這個功能。爲了簡單起見,我刪除了核心部分,並保留了單一的return聲明。

下面是例子:

// gtest and gmock files are added 

class DetectorGPIO 
{ 
    DetectorGPIO(void); 
    virtual ~DetectorGPIO() {} 
    StartPulseHigh(); 
}; 

BOOL DetectorGPIO::StartPulseHigh() 
{ 
    return 1; 
} 

class MockDetectorGPIO : public DetectorGPIO 
{ 
public: 
    MOCK_METHOD0(StartPulseHigh,BOOL(void)); 
}; 

我缺少任何概念?

我是Google Mock的新手。任何幫助將不勝感激。

+0

據我所知,它只是模擬虛擬多態對象,它總是限制了它的實用性。 –

+0

問題到底是什麼?你有編譯問題嗎?如果是這樣,編譯器輸出是什麼?我對Google Mock自己並不熟悉,但是看看你的源代碼:你正在使用''StartPulseHigh''',但它似乎沒有在你的'''DetectorGPIO'類中定義。 – Freakyy

+0

@Freakyy,其實我忘了在課堂上添加定義。我現在添加了。 –

回答

0

您可以在Google Mock Cookbook中閱讀有關hi-perf依賴注入的內容。我認爲它清楚地描述了使用這個概念的正確方法。

在這種類型的嘲笑你的MockDetectorGPIO不需要從DetectorGPIO繼承。在您要使用的具體類(或模擬),你應該使用模板的地方:

template <class Detector> 
void ConfigureDetectorGPIO(Detector* pDetector) 
{ 
    pDetector->StartPulseHigh(); 
} 

注意,在谷歌模擬,你沒有義務來嘲笑現有的方法。