Musimy napisać testy jednostkowe dla aplikacji wxWidgets przy użyciu Google Test Framework. Problem polega na tym, że wxWidgets używa makra IMPLEMENT_APP (MyApp), aby zainicjować i wprowadzić główną pętlę aplikacji. To makro tworzy kilka funkcji, w tym int main(). Struktura testowa Google używa również definicji makr dla każdego testu.wxWidgets: Jak zainicjować wxApp bez użycia makr i bez wprowadzania głównej pętli aplikacji?
Jednym z problemów jest to, że nie jest możliwe wywołanie makra wxWidgets od wewnątrz makra testu, ponieważ pierwszy z nich tworzy funkcje .. Tak, okazało się, że możemy wymienić makro z następującego kodu:
wxApp* pApp = new MyApp();
wxApp::SetInstance(pApp);
wxEntry(argc, argv);
Jest to dobry zamiennik, ale wywołanie wxEntry() wchodzi do oryginalnej pętli aplikacji. Jeśli nie wywołasz metody wxEntry(), niektóre części aplikacji nie zostaną zainicjalizowane.
Pytanie, w jaki sposób zainicjować wszystko, co wymagane do uruchomienia wxApp, bez faktycznego uruchamiania go, abyśmy mogli przetestować jego część?
Właściwie to nie działa. Aplikacja nie została jeszcze zainicjowana. –
Czy możesz dokładniej określić, co oznacza "nie zainicjowany"? Jeśli przeczytasz kod źródłowy, zobaczysz, że wxEntry naprawdę nie robi nic więcej niż wywołanie wxEntryStart(), a następnie wywołanie "OnInit()" i "OnRun()". Sądzę, że chciałbyś wywołać OnInit() ręcznie w twoich testach. – kbluck
OK, to coś, czego mi brakowało - OnInit(). Spróbuję tego. –