title: How to test MFC CWnd based classes using google test/mock?
body: <p>I am new with the idea of TDD. I have not used any testing framework before. Recently I have started reading about it and practicing with google test. 
  My goal is to start TDD in a legacy code base developed in MFC. Most of the time I have to work with GUI controls - developing new custom controls, adding features to existing custom controls etc. So, I want to automate the testing of GUI classes which are mostly derived from CWnd class.</p>
  
  <p>I have created a win32 console project in Visual Studio for testing, while creating the project I have ticked MFC in 'Add common header files for' option. Visual Studio project wizard has generated the main function and have created a CWinApp object. In the main function I have added the boilerplate code for google test. I have compiled the actual project (that is to be tested) and google test (and mock) library as .lib and linked it to the test project. I have successfully build the test project. I can test simple things from the projects. </p>
  
  <p>Here is wizard generated code (google test boilerplate code included)- </p>
  
  <pre><code>#include "stdafx.h"
  #include "TestMFC.h"
  
  #ifdef _DEBUG
  #define new DEBUG_NEW
  #endif
  
  // The one and only application object
  CWinApp theApp;
  using namespace std;
  
  int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  {
      int nRetCode = 0;
  
      HMODULE hModule = ::GetModuleHandle(NULL);
  
      if (hModule != NULL)
      {
          // initialize MFC and print and error on failure
          if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
          {
              // TODO: change error code to suit your needs
              _tprintf(_T("Fatal Error: MFC initialization failed\n"));
              nRetCode = 1;
          }
          else
          {
              // TODO: code your application's behavior here.
                testing::InitGoogleMock(&amp;argc, argv);
                nRetCode = RUN_ALL_TESTS();
          }
      }
      else
      {
          // TODO: change error code to suit your needs
          _tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
          nRetCode = 1;
      }
      return nRetCode;
  }
  </code></pre>
  
  <p>The challenge I am facing is I can't create actual window as that will require to have message loop. I wanted to mock CWnd so that I can test features based on know assumptions. But, I can't find a way to mock CWnd as it has some non-virtual member functions that depend on HWND. HWND is valid only if I create a window. Another challenge is message handlers are not virtual functions. So I can't mock message handlers and without creating a window it is not possible to route a message to its handler.</p>
  
  <p>I need thoughts on how can I approach to solve the problem. Can I do it without creating actual window with mock or something else? Or I can create window and route messages?</p>
  
  <p>Thanks in advance.</p>