WEB开发网
开发学院软件开发VC 使用测试优先方法开发用户界面 阅读

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

 2008-01-19 20:24:54 来源:WEB开发网   
核心提示:5、Mock Objects在删除操作的单元测试中,我们遇到的一个问题是,使用测试优先方法开发用户界面(6),影片列表的数据应该是保存在一个文本文件或者数据库当中的,如果我们编写的测试依赖于这些实际的文件或数据库,并设置它的内部期望值,d)、把创建的这个Mock Objects传递给需要测试的模块进行操作,那么我们的测

5、Mock Objects

在删除操作的单元测试中,我们遇到的一个问题是,影片列表的数据应该是保存在一个文本文件或者数据库当中的,如果我们编写的测试依赖于这些实际的文件或数据库,那么我们的测试就会受制于这些外部的资源。一旦文件或者数据库里的数据发生变化,必然会波及到我们的测试代码,从而产生错误的测试信息。前面的MovieListEditor中我们没有加入一些初始化的数据,在测试删除操作时会遇到一些问题 。

这里,我们引入Mock Objects。Mock Objects用来模拟外部复杂的资源(如数据库,网络连接等),使UI可以测试那些依赖于这些复杂外界资源的模块。例如在测试一个跟数据库有关系的模块时,我们并不一定要建立一个真实的数据库连接,而只需建立一个Mock Objects就可以了。测试所需的数据都存在于这个Mock Objects。可以说,Mock Objects为我们提供了一个轻量级的、可控制的、高效的模型。

在本例中,影片的增加、删除都会跟文件或数据库操作发生关系。这时我们就可以利用Mock Objects来隔离测试代码与文件或数据库。使用Mock Objects一般有以下几个步骤:

a)、定义一个外部资源的接口.(这个接口一般是可以在重构过程中提炼出来的)。

b)、定义一个Mock Objects,从外部资源的接口继承下来,实现外部资源的接口。

c)、创建一个Mock Objects,并设置它的内部期望值。

d)、把创建的这个Mock Objects传递给需要测试的模块进行操作。

e)、操作完毕后将Mock Objects内部的状态与期待状态比较。 现在我们就根据这个步骤来实现本例子中的Mock Objects.通过对前面的代码进行重构,我们可以提炼出一个接口MovieListEditor:

class AFX_EXT_CLASS MovieListEditor
{
public:
     MovieListEditor();
     virtual ~MovieListEditor();
public:
     virtual CStringArray* GetMovies()=0;
     virtual void Add(CString strMovie)=0;
     virtual void Delete(int nIndex)=0;
};

上一页  1 2 3 4 5 6 7 8  下一页

Tags:使用 优先

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接