2022年使用测试优先方法开发用户界面参照 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年使用测试优先方法开发用户界面参照 .pdf》由会员分享,可在线阅读,更多相关《2022年使用测试优先方法开发用户界面参照 .pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、使用测试优先方法开发用户界面本文作者未知 摘自机电之家1、概述测试优先是测试驱动开发(Test-Driven Development, TDD)的核心思想,它要求在编写产品代码前先编写基于产品代码的测试代码。在测试驱动开发的单元测试中,对GUI 应用实施自动测试应该是测试驱动开发的软肋之一。由于界面的操作是有由人来完成的,所以要想在 GUI 中完成单元自动测试是有一定难度的。Kent Beck 在它的测试驱动开发中就曾提到过这个问题。本文将通过一个例子来讲解在测试驱动开发中如何针对GUI 进行单元测试。这个例子是 David Astels 著的测试驱动开发实用指南(影印版 )中一个关于影片列表
2、管理的例子。该书中文版即将在国内出版。书中讨论并介绍了开发这个例子的多种方法。笔者将介绍其中的一种,并且为了方便使用C 的朋友的学习,书中的代码我用C 写了一遍,类名和变量名尽量和原书保持一致,以方便阅读该书的C 读者。在此也要感谢David Astels 给我们带来如此精彩的一本书。本文叙述背景为:CppUnit1.9.0, V isual C 6.0, Windows2000 pro 。文中叙述有误之处,敬请批评指正。如果读者对CppUnit还没有一定的了解,可以先参考笔者的另一篇文章CppUnit 测试框架入门 。2、需求分析对于这个影片管理的应用,我们主要实现增加、删除和显示影片列表的
3、功能。基于这些需求,我们可以画一张GUI 草图。界面的控件主要有:一个显示所有影片的列表listbox 控件,一个填写新的影片名的edit控件 ,一个增加button 控件,一个删除button 控件。由此,我们的开发目标就十分的明确了。3、编写 UI 测试代码这部分的UI 测试代码主要是测试各个控件是否正确生成并且是可见的,以及测试一些控件的 label 文字是否正确。我们从TestCase 继承一个类TestWidgets 用于测试窗口,并添加四个测试,分别测试listbox、 edit、add button、delete button。class TestWidgets : public
4、 CppUnit:TestCase CPPUNIT_TEST_SUITE(TestWidgets); CPPUNIT_TEST(testList); CPPUNIT_TEST(testField); CPPUNIT_TEST(testAddButton); CPPUNIT_TEST(testDeleteButton); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - CPPUNIT_TEST_SUITE_END(); publ
5、ic: 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() /
6、得到 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(s
7、trExpect, strText); 编译测试代码, 编译器会给我们一些出错信息。这要求我们必须马上编写产品代码以让编译通过。首先第一个要实现的产品代码就是MovieListWindow窗口类。class AFX_EXT_CLASS MovieListWindow : public CDialog public: MovieListWindow(CWnd* pParent = NULL); / standard constructor CListBox* GetMovieListBox()return &m_MovieListBox;CEdit* GetMovieField()return
8、&m_MovieField; CButton* GetAddButton()return &m_AddBtn; CButton* GetDeleteButton()return &m_DeleteBtn; void Init(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - / Dialog Data /AFX_DA TA(MovieListWindow) enum IDD = IDD_MOVIELISTDLG ; CBu
9、tton m_AddBtn; CButton m_DeleteBtn; CEdit m_MovieField; CListBox m_MovieListBox; /AFX_DA TA / Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(MovieListWindow) protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL / Implementation protect
10、ed: / Generated message map functions /AFX_MSG(MovieListWindow) /AFX_MSG DECLARE_MESSAGE_MAP(); 在 MovieListWindow窗口类中我们实现了需要的控件以及针对这些控件的一些方法,如 GetMovieListBox() 等,本文在此不做详述。编译测试代码和产品代码,检查是否通过。如未通过则继续检查产品代码以使编译和测试通过。4、编写控件行为测试代码接下来应该是编写点击add button 和 delete button 的测试代码了。同样,我们从 TestCase继承出 TestOperati
11、on:class TestOperation : public CppUnit:TestCase CPPUNIT_TEST_SUITE(TestOperation); CPPUNIT_TEST(testMovieList); CPPUNIT_TEST(testAdd); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - CPPUNIT_TEST(testDelete); CPPUNIT_TEST_SUITE_END(); pub
12、lic: void testMovieList(); void testAdd(); void testDelete(); public: void setUp(); void tearDown(); TestOperation(); virtual TestOperation(); private: static CString LOST_IN_SPACE; CStringArray m_MovieNames; MovieListWindow* m_pWindow; MovieListEditor* m_pEditor; ; 你会发现,在TestOperation 类中出现了一个成员变量Mo
13、vieListEditor* m_pEditor。类MovieListEditor是一个用来保存影片数据以及对影片数据进行增加,删除操作的管理类。后面我们会给出它的实现。看看setUp()做了什么:void TestOperation:setUp() /创建一个MovieListEditor实例m_pEditor = new MovieListEditor(); m_MovieNames.RemoveAll(); /将 MovieListEditor中的影片列表拷贝到m_MovieNames, 为后面测试作准备for(int n=0; nGetMovies()-GetSize(); n ) m
14、_MovieNames.Add(m_pEditor-GetMovies()-GetAt(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - 我们来看看添加影片的测试,请看代码注释:void TestOperation:testAdd() /拷贝一份movie list CStringArray MovieNamesWithAddition; for(int n=0; nInit(); /填写新的影片的名称CEdit* pE
15、dit = pWindow-GetMovieField(); pEdit-SetWindowText(LOST_IN_SPACE); /点击 add btn CButton* pBtn = pWindow-GetAddButton(); :SendMessage(pBtn-m_hWnd, BM_CLICK, 0, 0); /检查列表控件中是否已加入新的影片CListBox* pListBox = pWindow-GetMovieListBox(); CPPUNIT_ASSERT_EQUAL(MovieNamesWithAddition.GetSize(), pListBox-GetCount(
16、); /检查列表控件中影片名是否正确CString strNewMovieName; pListBox-GetText(pListBox-GetCount()-1, strNewMovieName); CPPUNIT_ASSERT_EQUAL(LOST_IN_SPACE, strNewMovieName);/销毁窗口pWindow-DestroyWindow(); delete pWindow; pWindow = NULL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年使用测试优先方法开发用户界面参照 2022 使用 测试 优先 方法 开发 用户界面 参照
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内