使用测试优先方法开发用户界面

简单的生活so

简单的生活so

2016-01-29 11:59

使用测试优先方法开发用户界面,使用测试优先方法开发用户界面

使用测试优先方法开发用户界面

作者:Cpluser

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)

演示代码下载

关键字:测试优先 测试驱动开发 Mock Objects CppUnit

1、概述

  测试优先是测试驱动开发(Test-Driven Development, TDD)的核心思想,它要求在编写产品代码前先编写基于产品代码的测试代码。在测试驱动开发的单元测试中,对GUI应用实施自动测试应该是测试驱动开发的软肋之一。由于界面的操作是有由人来完成的,所以要想在GUI中完成单元自动测试是有一定难度的。Kent Beck在它的《测试驱动开发》中就曾提到过这个问题。
  本文将通过一个例子来讲解在测试驱动开发中如何针对GUI进行单元测试。这个例子是David Astels著的《测试驱动开发实用指南(影印版)》中一个关于影片列表管理的例子。该书中文版即将在国内出版。书中讨论并介绍了开发这个例子的多种方法。笔者将介绍其中的一种,并且为了方便使用C++的朋友的学习,书中的代码我用C++写了一遍,类名和变量名尽量和原书保持一致,以方便阅读该书的C++读者。在此也要感谢David Astels给我们带来如此精彩的一本书。
  本文叙述背景为:CppUnit1.9.0, Visual C++ 6.0, Windows2000 pro。文中叙述有误之处,敬请批评指正。如果读者对CppUnit还没有一定的了解,可以先参考笔者的另一篇文章《CppUnit测试框架入门》。

2、需求分析

  对于这个影片管理的应用,我们主要实现增加、删除和显示影片列表的功能。基于这些需求,我们可以画一张GUI草图,如图1:


图1

  界面的控件主要有:一个显示所有影片的列表listbox控件,一个填写新的影片名的edit控件,一个增加button控件,一个删除button控件。由此,我们的开发目标就十分的明确了。

3、编写UI测试代码

  这部分的UI测试代码主要是测试各个控件是否正确生成并且是可见的,以及测试一些控件的label文字是否正确。
  我们从TestCase继承一个类TestWidgets用于测试窗口,并添加四个测试,分别测试listbox、edit、add button、delete button。

class TestWidgets : public CppUnit::TestCase{     CPPUNIT_TEST_SUITE(TestWidgets);     CPPUNIT_TEST(testList);     CPPUNIT_TEST(testField);     CPPUNIT_TEST(testAddButton);     CPPUNIT_TEST(testDeleteButton);     CPPUNIT_TEST_SUITE_END();public:     TestWidgets();     virtual ~TestWidgets();public:     virtual void setUp();     virtual void tearDown();      void testList();     void testField();     void testAddButton();     void testDeleteButton();private:     MovieListWindow* m_pWindow;};
其中,MovieListWindow是一个窗口类。我们来看看其中的一个测试,请看代码中的注释。
void TestWidgets::testAddButton(){       //得到btn指针       CButton* pAddButton = m_pWindow-GetAddButton();       //检查是否生成btn       CPPUNIT_ASSERT(pAddButton-m_hWnd);       //检查btn是否可见       CPPUNIT_ASSERT_EQUAL(TRUE, ::IsWindowVisible(pAddButton-m_hWnd));       CString strText;       pAddButton-GetWindowText(strText);       CString strExpect = "Add";       //检查btn的Label文字是否正确       CPPUNIT_ASSERT_EQUAL(strExpect, strText);}
  编译测试代码,编译器会给我们一些出错信息。这要求我们必须马上编写产品代码以让编译通过。首先第一个要实现的产品代码就是MovieListWindow窗口类。
class AFX_EXT_CLASS MovieListWindow : public CDialog{public:     MovieListWindow(CWnd* pParent = NULL); // standard constructor     CListBox* GetMovieListBox(){return &m_MovieListBox;};     CEdit* GetMovieField(){return &m_MovieField;};     CButton* GetAddButton(){return &m_AddBtn;};     CButton* GetDeleteButton(){return &m_DeleteBtn;};     void Init();     // Dialog Data     //{{AFX_DATA(MovieListWindow)     enum { IDD = IDD_MOVIELISTDLG };     CButton m_AddBtn;     CButton m_DeleteBtn;     CEdit m_MovieField;     CListBox m_MovieListBox;     //}}AFX_DATA     // Overrides     // ClassWizard generated virtual function overrides     //{{AFX_VIRTUAL(MovieListWindow)  protected:     virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support     //}}AFX      
展开更多 50%)
分享

猜你喜欢

使用测试优先方法开发用户界面

C语言教程 C语言函数
使用测试优先方法开发用户界面

Android用户界面开发之:TextView的使用实例

编程语言 网络编程
Android用户界面开发之:TextView的使用实例

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

开发基于Java的图形用户界面

Java JAVA基础
开发基于Java的图形用户界面

使用wxdindows开发跨平台的界面

编程语言 网络编程
使用wxdindows开发跨平台的界面

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

CSS实现用户界面开发和交互式布局

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
CSS实现用户界面开发和交互式布局

Visual Basic 用户界面

编程语言 网络编程
Visual Basic 用户界面

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

CAD:如何取代CHT进行文字替换

CAD:如何取代CHT进行文字替换

AutoCAD设计中心简介、启动和界面

AutoCAD设计中心简介、启动和界面
下拉加载更多内容 ↓