Sasi Sasi - 8 months ago 132
C++ Question

Mock non-virtual method C++ (gmock)

I have class

class CSumWnd : public CBaseWnd
{

private:
bool MethodA()
}


Please can you help how to mock
MethodA()
without making virtual,
I didn't understand the concept of hi-perf dependency injection

Answer Source

It means you will have to templatize your production code. Using your example:

CSumWind class definition:

class CSumWnd : public CBaseWnd
{

 private:
 bool MethodA()
};

Mocked CSumWnd class definition:

class MockCSumWnd : public CBaseWnd
{

 private:
 MOCK_METHOD(MethodA, bool());
};

Production class which have to be tested with mocked class CSumWind. Now it becomes templated to provide using CSumWind class in production code and MockCSumWnd class in tests.

template <class CSumWndClass>
class TestedClass {
//...
   void useSumWnd(const CSumWndClass &a);

private:
  CSumWndClass sumWnd;
};

Instantiation of TestedClass in production:

TestedClass <CSumWnd> obj;

Instantiation of TestedClass object in test executable:

TestedClass <MockCSumWnd> testObj;
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download