我正在使用 minunit C 应用程序的测试框架。我有一堆 GUI 工作的函数,但我不确定需要做什么。 我已经创建了一个主程序库并将其链接到我的单元测试框架,因此我可以访问所有功能。
这是我需要测试的示例函数。
int
main_gui_init()
{
GladeXML *main_window;
main_widgets_t *widgets;
zlog_category_t *zc;
zc = zlog_get_category(LOG_CATEGORY);
/* load the interface */
main_window = glade_xml_new(MAIN_GLADE_FILE, NULL, NULL);
if (!main_window) {
zlog_error(zc, "Failed to load main interface");
return -1;
}
widgets = (main_widgets_t *) malloc (sizeof(main_widgets_t));
if (!widgets) {
zlog_error(zc, "Failed to allocate memory for widgets");
return -1;
}
/* Initialize widgets we are interested in */
main_gui_init_widgets(main_window, widgets);
/* connect the signals in the interface */
main_gui_register_callbacks(main_window, widgets);
zlog_info(zc, "Main gui init done.");
return 0;
}
这就是我想测试它的方式:
/* Test main_gui_init() */
char* run_all_main_gui_init_test()
{
/* Functions are not yet written but the name
shows what needs to be tested */
mu_run_test(test_main_gui_init_valid);
mu_run_test(test_main_gui_init_invalid_main_window);
mu_run_test(test_main_gui_init_malloc_fail);
}
/* Starting point. Specify all the functions that needs to be tested here */
char* run_all_main_gui_tests()
{
run_all_main_gui_init_test();
}
如何编写测试程序?我可以为每个测试用例编写一个 stub ,例如,让函数 glade_xml_new() 返回 NULL,但是由于我已经链接了主程序,所以它不允许我对相同的函数定义两次。
我需要做什么?
最佳答案
您需要包含一个模拟库,我不建议您自己这样做。一个不错的选择是 cmocka它在 c 库上作为依赖项使用,并允许您使用模拟重新定义对象。
否则,在 C 中,您唯一的选择是使用预处理器或链接器来模拟您的依赖项。
关于C:如何对不带任何参数且主程序链接到单元测试框架的函数进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25002016/