用户名: 密码: 咨询热线:025-81617169、025-86982202  QQ:279768085、879324637
首页 外语 计算机 考研/MBA 职业培训 文体艺术 基础教育 远程·学习卡
 
资讯 高考 学位学历 出国留学 校园 极速商城 学习资料 论坛
教育时讯 | 高考 | 培训 | 研究生 | 出国 | 中小学 | 远程 | 驾校 | 健身 | 外语 | 计算机 | 学位学历
您的位置计算机 -> 正文
代码测试的简单框架

2008-2-19 9:43:30 来源: 网络 点击:0
代码测试的简单框架

    写完代码后,你当然要测试它。有许多种方法来测试代码:你可以在你的代码中加些断点,或者观察实际发生的情况并和你预计的结果相比较,又或者写些测试程序等等。 
给代码写测试通常是测试代码的最好方法。因为写出来的测试可以一遍又一遍地执行。当你修改了实现,你可以再次运行测试来检查一下你是否引入了任何bug。这种方法可以将你从调试中拯救出来,并引领你生产出具有更低错误倾向的代码。 
作为一个一般的方针,在开发你的测试的时候,我们建议你不要把结果打印到屏幕上;而是,根据输入数据,用asserts创建一个后置条件指明期望得到哪些输出数据。 
如果你在运行测试时把结果打印到了屏幕上,开始时你会去分析这些结果。然而,随着时间延长,你会越来越不注意这些打印到屏幕上的数据。即使数据指出了一个错误,你也可能不会意识到。 
此外,如果别的人试着运行测试,他们不得不首先弄明白这些打印出来的数据是什么意思,这可能要花不少时间。反过来,如果你用了asserts,人们就只要去运行你的测试。如果发生了错误,他们会被提示在哪一行发生了错误,他们就可以去修正它。 
这儿是一个测试例程的例子: 
#include 
#include 
// 整理一个字符串的前导和追尾空白,
// 返回整理后的字符串
std::string trim_spaces( const std::string & str)
{
/* trim_spaces 的实现*/

void testTrimSpaces()
{
assert( trim_spaces( " abc") == "abc");
assert( trim_spaces( "def ") == "def");
assert( trim_spaces( " this is a test ") == "this is a test");
assert( trim_spaces( "") == "");
assert( trim_spaces( " ") == "");


  怎样建立一个测试框架,和建立它每一个步骤: 

  第一步:将测试代码和实际代码清楚地分隔开。要做到这一步,一个很简单的方法是把所有用来做测试的文件都放到一个特别的目录中去。每个用来做测试的文件的名字都应该以test开头,然后加上它所测试的模块/类名。例如,从testWordTokenizer.cpp文件的名字就可以看出,它是用来测试一个断词类(word tokenizer class)的。

  测试用的代码仅在执行测试时才被编译。当生成实际的应用程序时,测试代码会在预处理阶段就被移除。如果我们的每个测试文件都遵循下面的模式就可以保证这一点: 
// Test.cpp
#ifdef TESTING
/* testing code*/
#endif // TESTING
// End of file 
  于是,如果定义了TESTING,我们就是在做测试;否则,我们就是在从实际的代码生成应用程序。
 
  第二步:所有用来测试代码片断的函数的名字都应该以Test或test开头。对于你所测试的每个模块/类,都要有一个主测试函数负责调用其他测试函数来测试模块/类的各个代码段。这样你就不需要暴露出所有函数——只要暴露出主测试函数就可以了,像下面的例子: 
// TestUrlUtility –用于测试 "Url Utility 函数族"
#if defined( TESTING)
#include "UrlUtility.h" 
// 这个命名空间中的函数,从这个源文件外部是不可见的
namespace // 匿名命名空间
{
void TestDivideURL()
{ /* 测试代码 */ } 
void TestIsUrlValid()
{ /* 测试代码*/ } 
void TestIsHttpUrlValid()
{ /* 测试代码*/ } 
void TestParseHttpUrl()
{ /* 测试代码*/ } 
}; //匿名命名空间 
// ... 这是从这个源文件外部唯一可见的函数
//
// 我们希望暴露出这个函数;
// 在任意文件中,你可以声明它的原型如下:
// void TestUrlUtility();
//
// 然后就可以在你的代码中调用
void TestUrlUtility()
{
TestDivideURL();
TestIsUrlValid();
TestIsHttpUrlValid();
TestParseHttpUrl();

#endif // #if defined( TESTING)
// 文件结束


  第三步:创建一个测试主文件(大概应该叫做testMain.cpp),其中包含有开始执行测试的main函数。这个“main”函数要做的就是调用各种不同的测试函数。你可以取消希望执行的测试前面的注释符号,或者把你不想执行的测试注释掉。它的代码看起来会是这个样子:
[责任编辑: admin ]
大字 中字 小字】【关闭窗口



正在加载相关新闻,请稍等。。。



正在加载相关评论,请稍等。。。
2008年专转本资料火热销售
热门课程
 · 上海中级口译证书强化班
 · 大学英语四、六级强化班
 · 汽车经纪师自学课程
 · 江海培训平面设计三个月就业班
 · 江海培训三个月室内外设计就业班
 · 江海学校手机维修培训课程
 · 江海学校家电维修培训全科班
 · 江苏江海摩托车维修培训课程
前程专区  · 奥运语言服务小语种告急
 · 硕士被困传销陷阱 "洗脑"系传销头
 · “职教联盟”为学生量身定制 职高
 · 长沙市公开选拔10名县(处)级领导干
新航道雅思 华图公务员
机构推荐
 · 青岛托马斯外国语学校
 · 捷恒森阿根廷留学
 · 南京领航人才开发有限公司
 · 黑龙江龙华厨师面点学校
 · 哈尔滨明乔外语学校(北京雅思哈尔滨分校)
 · 哈尔滨嘉仪礼仪(北京未来之舟)公司
前程关注
[计 算 机]
大连华育ASP网站开发工程师课
[外 语]
金陵国语外籍教师中口小班(20
[考 研]
考博英语培训课程
[职业培训]
富氏艺术摄影影楼化妆师培训课
[文体艺术]
韩盛健身次卡
[基础教育]
08年高中部春季强化高三年级培
腾讯教育 人民网教育 中国教师招聘联盟网 星空教育 江苏招生考试网 模考网 择校网 江苏民办教育网
E时代学生网 金陵热线 南京培训通 北方集团 金陵人才网 南京二手房网 南京租房网 e美食
教育部 江苏省教育厅 江苏教育考试院 江苏教育资源网 澳洲技术移民 江苏教育电视台 江苏教育在线 江苏民办教育网 江苏职教网
江苏基础教育网 中国江苏网 学历文凭查询 搜狐留学 投资移民网 中国高考招生网 翱翔高考 全球教育网 新学道教育 中国教育搜索
中国教师招聘 中国前程网 中国学生网 可控硅 无锡南洋剧社 上海招生考试网 天天招生网 嵌入式Linux

网站介绍 | 网站文化 | 服务优势 | 诚聘英才 | 免责声明 | 广告招商 | 团体培训 | 分站加盟 | 联系我们 | 加入收藏 |  在线QQ(1)   在线QQ(2)
国家信息产业部网站经营许可证编号:苏B2-20060075 国家信息产业部备案号:苏ICP备05000800  
江苏省信息化协会会员网站 江苏省互联网协会会员网站
Copyright © 2005-2008 中国前程网 All Rights Reserved
网络支持:江苏教育在线 江苏招生考试网