【问题标题】:Unit Test for Callback using GTest使用 GTest 进行回调的单元测试
【发布时间】:2016-03-25 20:08:32
【问题描述】:

这是使用 Bonjour 的网络中设备发现库的类设计。我需要使用 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。但是结果会在回调中返回。如何知道使用 GTest 是否正确枚举了设备。 我需要 GTest Mock Here 吗??

【问题讨论】:

    标签: c++ unit-testing googletest


    【解决方案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));
    

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 2015-05-03
      相关资源
      最近更新 更多