这个简单教程教你若何测试你应用的功能。
主动化测试用来包管你法度榜样的质量以及让它以预想的运行。单位测试只是检测你算法的某一部分,而并不重视各组件间的适应性。这就是为什么会有功能测试,它有时也称为集成测试。
功能测试简单地与你的用户界面进行交互,无论它是网站照样桌面应用。为了展示功能测试若何工作,我们以测试一个 Gtk+ 应用为例。为了简单起见,这个教程里,我们应用 Gtk+ 2.0 教程的示例。
基本设置
对于每一个功能测试,你平日须要定义一些全局变量,比如 “用户交互时延” 或者 “掉败的超不时光”(也就是说,如不雅在指定的时光内一个事宜没有产生,法度榜样就要中断)。
- #define TTT_FUNCTIONAL_TEST_UTIL_IDLE_CONDITION(f) ((TttFunctionalTestUtilIdleCondition)(f))
- #define TTT_FUNCTIONAL_TEST_UTIL_REACTION_TIME (125000)
- #define TTT_FUNCTIONAL_TEST_UTIL_REACTION_TIME_LONG (500000)
- typedef gboolean (*TttFunctionalTestUtilIdleCondition)(gpointer data);
- struct timespec ttt_functional_test_util_default_timeout = {
- 20,
- 0,
- };
如图所示,我们假设,填满第一行,玩家 A 就赢,因为玩家 B 没有留意,只填充了第二行。
如今我们可以实现我们本身的超时函数。这里,为了可以或许获得期望的延迟,我们采取 usleep 函数。
- void
- ttt_functional_test_util_reaction_time()
- {
- usleep(TTT_FUNCTIONAL_TEST_UTIL_REACTION_TIME);
- }
- void
- ttt_functional_test_util_reaction_time_long()
- {
- usleep(TTT_FUNCTIONAL_TEST_UTIL_REACTION_TIME_LONG);
- }
直到获得控制状况,超时函数才会推迟履行。这对于一个异步履行的动作很有赞助,这也是为什么采取这么长的时延。
- void
- ttt_functional_test_util_idle_condition_and_timeout(
- TttFunctionalTestUtilIdleCondition idle_condition,
- struct timespec *timeout,
- pointer data)
- {
- struct timespec start_time, current_time;
- clock_gettime(CLOCK_MONOTONIC,
- &start_time);
- while(TTT_FUNCTIONAL_TEST_UTIL_IDLE_CONDITION(idle_condition)(data)){
- ttt_functional_test_util_reaction_time();
- clock_gettime(CLOCK_MONOTONIC,
- ¤t_time);
- if(start_time.tv_sec + timeout->tv_sec < current_time.tv_sec){
- break;
- }
- }
- ttt_functional_test_util_reaction_time();
- }
与图形化用户界面交互
为了模仿用户交互的操作, Gdk 库 为我们供给了一些须要的函数。要完成我们的工作,我们只须要如下 3 个函数:
- gdk_display_warp_pointer()
- gdk_test_simulate_button()
- gdk_test_simulate_key()
举个例子,为了测试按钮点击,我们可以这么做:
- gboolean
- ttt_functional_test_util_button_click(GtkButton *button)
推荐阅读
1865年,理查德·米勒·德文斯(Richard Millar Devens)在《贸易妙闻百科全书》(Cyclopædiaof Commercial and Business Anecdotes)中提出了“贸易智能”(BI>>>详细阅读
本文标题:用C语言对Gtk+应用进行功能测试
地址:http://www.17bianji.com/lsqh/37870.html
1/2 1