Модульный тест для обратного вызова с использованием GTest - PullRequest
0 голосов
/ 27 декабря 2011

Это проект класса для библиотеки обнаружения устройств в сети, использующей Bonjour. Мне нужно разработать для нее тестовый пример с использованием GTest. Я новичок в GTEst.

  1. Требуется клиентская программареализовать IDeviceEnumerationCallback для получения информации об устройстве

  2. Обратный вызов будет вызываться после интервала времени и частоты. Интервал Say равен 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 ??

1 Ответ

1 голос
/ 18 января 2012

Вы можете использовать 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));
...