//将Mock Objects的内部数据和期望值进行比较
CPPUNIT_ASSERT_EQUAL(MovieNamesWithAddition.GetSize(),
m_pEditor->GetMovies()->GetSize());
//检查列表控件中影片名是否正确
CString strNewMovieName;
pListBox->GetText(pListBox->GetCount()-1, strNewMovieName);
CPPUNIT_ASSERT_EQUAL(LOST_IN_SPACE, strNewMovieName);
//将Mock Objects的内部数据和期望值进行比较
int nIndex = m_pEditor->GetMovies()->GetSize();
CPPUNIT_ASSERT_EQUAL(LOST_IN_SPACE, m_pEditor->GetMovies()->GetAt(nIndex-1));
//销毁窗口
pWindow->DestroyWindow();
delete pWindow;
pWindow = NULL;
}
请注意,这里测试的数据都是mockEditor里的,而且在UI进行添加操作后,还将mockEditor内部的状态与期待状态做了比较。
[NextPage]
CPPUNIT_ASSERT_EQUAL(MovieNamesWithAddition.GetSize(), m_pEditor->GetMovies()->GetSize());
CPPUNIT_ASSERT_EQUAL(LOST_IN_SPACE, m_pEditor->GetMovies()->GetAt(nIndex-1));
其他删除操作的测试跟添加类似,在此不做详述。至此,我们就完成了这个GUI应用程序的开发。
6、源码说明
本文附带的代码包括三个Project,分别是Movie、 GuiTestFirst、AppMovieList.Movie是产品代码.GuiTestFirst是测试代码。AppMovieList是使用Movie输出的产品代码而写的应用程序,它从MovieListEditor继承出一个新的影片管理类 MyEditor。它主要是演示如何使用我们提炼出来的MovieListEditor接口。例如你可以实现CXmlMovieListEditor,CAccessMovieListEditor等等。进入GuiTestFirst打开所有这些工程。
7、总结
a)、对GUI应用实施测试优先开发方法,这在测试驱动开发中并不是必须的,可根据开发的实际情况来选择。
b)、我们通过引入Mock Objects,我们使测试代码和外部复杂的资源隔离开来,同时也使我们能够从中既有代码中提炼出清晰的接口,使代码整洁可用。
文章来源于领测软件测试网 https://www.ltesting.net/










