Necesitamos escribir pruebas unitarias para una aplicación wxWidgets usando Google Test Framework. El problema es que wxWidgets utiliza la macro IMPLEMENT_APP (MyApp) para inicializar e ingresar el bucle principal de la aplicación. Esta macro crea varias funciones incluyendo int main(). El marco de prueba de google también usa definiciones de macro para cada prueba.wxWidgets: cómo inicializar wxApp sin usar macros y sin ingresar el bucle principal de la aplicación?
Uno de los problemas es que no es posible llamar a la macro wxWidgets desde dentro de la macro de prueba, porque el primero crea funciones .. Por lo tanto, encontramos que podríamos reemplazar la macro con el siguiente código:
wxApp* pApp = new MyApp();
wxApp::SetInstance(pApp);
wxEntry(argc, argv);
Es un buen reemplazo, pero la llamada a wxEntry() ingresa al bucle de la aplicación original. Si no llamamos a wxEntry() todavía hay algunas partes de la aplicación no inicializadas.
La pregunta es cómo inicializar todo lo que se requiere para ejecutar una aplicación wx, sin realmente ejecutarla, entonces ¿podemos probar partes de ella?
En realidad, esto no funciona. La aplicación aún no se ha inicializado –
¿Puede ser más específico sobre qué significa "no inicializado"? Si lee el código fuente, verá que wxEntry realmente no hace mucho más que invocar wxEntryStart() y luego llamar a "OnInit()" y "OnRun()". Creo que querrías llamar a OnInit() manualmente en tus pruebas. – kbluck
OK, eso es algo que eché de menos - OnInit(). Lo intentaré. –