2011-12-27 199 views
0

這是使用Bonjour的網絡中設備發現庫的類設計。我需要爲使用GTest的開發測試用例。我是GTEst的新用戶。使用GTest進行回調的單元測試

  1. 客戶端程序需要實現IDeviceEnumerationCallback接收設備信息

  2. 回調將間隔時間和頻率之後調用 說時間間隔爲200毫秒,頻率爲2,它會調用後的兩次回調200毫秒。

    class IDeviceEnumerationCallback 
    { 
    public: 
    /* This callback is called when Device are Enumerated and is regsitered in EnumerateWiFiDevice method */ 
    
        virtual void onDeviceDiscovered(DeviceInfo* pDeviceInfo,unsigned short nNoOfDevice,void* pContext) = 0; 
    }; 
    
    IDeviceDiscovery 
    { 
        virtual int InitialiseDeviceDiscovery(IDeviceEnumerationCallback*) = 0; 
        virtual void UnInitialiseDeviceDiscovery() = 0; 
        virtual int EnumerateDevice() = 0; 
        virtual void SetDiscoveryInterval(unsigned long nDiscoveryInterval); 
        virtual void SetDiscoveryFrequency(unsigned short nFrequency); 
        virtual unsigned long GettDiscoveryInterval(); 
        virtual unsigned short GettDiscoveryFrequency(); 
    
    
    } 
    
    class CDeviceDiscovery : public IDeviceDiscovery 
    { 
    // implemenation 
    } 
    

當我開發單元測試的EnumerateDevice(),它會立即返回-1說或1.But結果將在callback.How退還知道是否設備枚舉正確或不使用GTEST。 我需要GTest模擬嗎?

回答

1

你可以爲此使用Gmock。一個很好的解釋可以在此頁面上找到: http://code.google.com/p/googlemock/wiki/ForDummies

你會嘲笑IDeviceEnumerationCallback

#include <gmock/gmock.h> 
class MockIDeviceEnumerationCallback : public IDeviceEnumerationCallback 
{ 
public: 
    MOCK_METHOD3(onDeviceDiscovered, void(DeviceInfo* pDeviceInfo,unsigned short nNoOfDevice,void* pContext)); 
}; 

,並使用期望功能的調用

MockIDeviceEnumerationCallback mock; 
EXPECT_CALL(mock, onDeviceDiscovered(_, _, _)) 
    .WillOnce(Return(1));