使用GTest对回调进行单元测试

Unit Test for Callback using GTest

本文关键字:单元测试 回调 GTest 使用      更新时间:2023-10-16

这是使用Bonjour在网络中进行设备发现库的类设计。我需要使用GTest开发测试用例。我是GTEst的新手。

  1. 客户端程序需要实现IDeviceEnumerationCallback来接收设备信息

  2. 回调将在间隔时间和频率之后被调用假设间隔为200ms,频率为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。但是结果将在回调中返回。如何使用GTest知道Device是否被正确枚举。我需要GTest Mock在这里吗??

可以使用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));