2011-12-27 210 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));