Search code examples
c++mockinggooglemock

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


Solution

  • 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;