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

发表于:2010-5-05 16:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

分享:

  4、编写控件行为测试代码

  接下来应该是编写点击add button和delete button的测试代码了。同样,我们从TestCase继承出TestOperation:
 

 class TestOperation : public CppUnit::TestCase
{
     CPPUNIT_TEST_SUITE(TestOperation);
     CPPUNIT_TEST(testMovieList);
     CPPUNIT_TEST(testAdd);
     CPPUNIT_TEST(testDelete);
     CPPUNIT_TEST_SUITE_END();
public:
     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类中出现了一个成员变量MovieListEditor* m_pEditor。类MovieListEditor是一个用来保存影片数据以及对影片数据进行增加,删除操作的管理类。后面我们会给出它的实现。看看 setUp()做了什么: 
 

 void TestOperation::setUp()
{
     //创建一个MovieListEditor实例
     m_pEditor = new MovieListEditor();
     m_MovieNames.RemoveAll();
     //将MovieListEditor中的影片列表拷贝到m_MovieNames,为后面测试作准备
     for(int n=0; n<m_pEditor->GetMovies()->GetSize(); n  )
     {
        m_MovieNames.Add(m_pEditor->GetMovies()->GetAt(n));
     }
}

    我们来看看添加影片的测试,请看代码注释:
 

 void TestOperation::testAdd()
{
     //拷贝一份movie list
     CStringArray MovieNamesWithAddition;
     for(int n=0; n<m_MovieNames.GetSize(); n  )
     {
        MovieNamesWithAddition.Add(m_MovieNames.GetAt(n));
     }
     MovieNamesWithAddition.Add(LOST_IN_SPACE);
     //生成窗口
     MovieListWindow *pWindow = new MovieListWindow(m_pEditor);
     pWindow->Init();
     //填写新的影片的名称
     CEdit* pEdit = 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());
     //检查列表控件中影片名是否正确
     CString strNewMovieName;
     pListBox->GetText(pListBox->GetCount()-1, strNewMovieName);
     CPPUNIT_ASSERT_EQUAL(LOST_IN_SPACE, strNewMovieName);
     //销毁窗口
     pWindow->DestroyWindow();
     delete pWindow;
     pWindow = NULL;
}

    编译后会有出错信息,主要的错误有:
    a)、我们把m_pEditor保存在MovieListWindow中了,这需要我们修改原来的MovieListWindow的构造函数。
    b)、没有MovieListEditor类。

    MovieListEditor的实现如下:

 class AFX_EXT_CLASS MovieListEditor
{
public:
     MovieListEditor();
     virtual ~MovieListEditor();
public:
     virtual CStringArray* GetMovies(){return &m_arMovieList;};
     virtual void Add(CString strMovie){m_arMovieList.Add(strMovie);};
     virtual void Delete(int nIndex){m_arMovieList.RemoveAt(nIndex);};
private:
     CStringArray m_arMovieList;
};

    再次编译,已经通过.运行测试,发现在: 
 

 CPPUNIT_ASSERT_EQUAL(MovieNamesWithAddition.GetSize(), pListBox->GetCount());

    测试通不过。检查后知道原因是,我们在测试代码里:

 ::SendMessage(pBtn->m_hWnd, BM_CLICK, 0, 0);

    给add button发送了点击按钮的消息,但是在MovieListWindow 窗口中我们没有加入消息的响应函数,因此测试没有通过。赶紧添加消息响应函数。
 

 void MovieListWindow::OnClickAddButton()
{
     UpdateData();
     CString strNewMovieName;
     m_MovieField.GetWindowText(strNewMovieName);
     if("" != strNewMovieName)
     {
        m_pEditor->Add(strNewMovieName);
        m_MovieListBox.AddString(strNewMovieName);
     }
}

    编译、测试、通过。

32/3<123>
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号