m_p*_*tor 23 c++ wxwidgets unit-testing googletest
我们需要使用Google Test Framework为wxWidgets应用程序编写单元测试.问题是wxWidgets使用宏IMPLEMENT_APP(MyApp)来初始化并进入应用程序主循环.这个宏创建了几个函数,包括int main().谷歌测试框架还为每个测试使用宏定义.
其中一个问题是无法从测试宏中调用wxWidgets宏,因为第一个宏创建函数.所以,我们发现我们可以用以下代码替换宏:
wxApp* pApp = new MyApp();
wxApp::SetInstance(pApp);
wxEntry(argc, argv);
Run Code Online (Sandbox Code Playgroud)
这是一个很好的替代品,但是wxEntry()调用进入原始的应用程序循环.如果我们不调用wxEntry(),仍然有一些应用程序的部分未初始化.
问题是如何初始化运行wxApp所需的所有内容,而不实际运行它,因此我们能够对其中的部分进行单元测试?
Dan*_*ull 12
用2.8.10自己完成了这个.神奇之处在于:
// MyWxApp derives from wxApp
wxApp::SetInstance( new MyWxApp() );
wxEntryStart( argc, argv );
wxTheApp->OnInit();
// you can create top level-windows here or in OnInit()
...
// do your testing here
wxTheApp->OnRun();
wxTheApp->OnExit();
wxEntryCleanup();
Run Code Online (Sandbox Code Playgroud)
您可以创建一个wxApp实例,而不是使用上面的技术派生自己的类.
我不确定您是否希望在不进入mainloop的情况下对应用程序进行单元测试,因为许多wxWidgets组件需要传递事件才能运行.通常的方法是在进入主循环后运行单元测试.
小智 6
IMPLEMENT_APP_NO_MAIN(MyApp);
IMPLEMENT_WX_THEME_SUPPORT;
int main(int argc, char *argv[])
{
wxEntryStart( argc, argv );
wxTheApp->CallOnInit();
wxTheApp->OnRun();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您要使用的功能:
bool wxEntryStart(int& argc, wxChar **argv)
Run Code Online (Sandbox Code Playgroud)
而不是 wxEntry。它不会调用您的应用程序的 OnInit() 或运行主循环。
您可以wxTheApp->CallOnInit()
在测试中需要时调用 OnInit()。
你需要使用
void wxEntryCleanup()
Run Code Online (Sandbox Code Playgroud)
当你完成时。
归档时间: |
|
查看次数: |
17939 次 |
最近记录: |