单元测试可以归纳为:异常测试(也称为白盒测试、压力测试、可靠性测试),用来确认代码的结构可靠性,能处理所有可行的输入以及输入组合,不会产生预料之外的异常。功能测试,用于验证所建立模块是否符合需求和功能是否正常工作。在单元级别创建功能测试涉及到人工输入,以指定特定的输入和状态条件、以及预期的输出。
单元测试通常涉及手工编写测试集、指定输入数据以及为缺少的函数提供桩函数。而对于桩函数我们又该如何去构建呢?
首先,对于项目中缺少的函数需要构造桩函数,它有可能是低层的一个接口函数,SDK、MFC等提供给用户使用的API函数。在对这些API函数构建桩函数的时候,我们可以做到尽量的简洁,在测试的过程中我们并不需要对这些函数的内部进行测试,只需要它为我们测试的代码提供一个返回值,或者只是为了让我们所测试的代码更好的执行下面的流程。
简单的介绍个MFC的例子:
void CLightSettingDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting RePaint(); } else { CDialog::OnPaint(); } } |
在这里输入测试用例后执行的都是else下的语句,为了能够执行到IF判断为TRUE的语句。需要对IsIconic()打桩,手动返回TRUE的值。
桩函数如下:
#include <afxwin.h> ::BOOL (::CWnd::Test_Stub_IsIconic)(void) const { Return true; } |
对上面的一段代码再次进行测试,当测试用例输入后,运行测试在CPaintDC dc(this);遇到异常;这是因为CPaintDC dc(this); 在当前窗口创建CPaintDC对象;它是由MFC提供的一个构造函数,这个语句是需要初始化this这个对象。初始化一个图形化的组件,它会涉及到初始化整个应用程序,包括GUI的组件等一系列额外的工作。然后在测试的过程也会涉及到打开窗口,按按钮等的交互式方式,而这些就不是单元测试的范畴。这时候就会对CPaintDC dc(this);进行打桩,使程序继续运行。
......
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。