2017-08-11 111 views
0

virtualのGoogle Mockをテストしましたが、non-virtualのためにはできません。 "hi-perf依存性注入"という概念を理解できませんでしたクラスの非仮想ファンクションのGoogleモック

以下は、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から継承する必要はありません。あなたは、テンプレートを使用する必要があります具体的なクラス(またはモック)を使用する代わりに:

Googleのモックでは、既存の方法を模擬する義務はありません。なお
template <class Detector> 
void ConfigureDetectorGPIO(Detector* pDetector) 
{ 
    pDetector->StartPulseHigh(); 
} 

関連する問題