首 页 高校招生 - 高级研修 - 教育新闻 - 学习资料 - 搜索中心 - 北斗论坛 - 名校荟萃   外语 - 计算机 - 考研 - 职业资格 - 艺术体育 - 中小学  

 
·教育搜索 EDUSOU
| 计算机 > 软件测试 > 正文 进入 教育人生网总站

代码测试的简单框架

2007-08-02    教育人生网    浏览: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”函数要做的就是调用各种不同的测试函数。你可以取消希望执行的测试前面的注释符号,或者把你不想执行的测试注释掉。它的代码看起来会是这个样子: 

实用导航:高考 | 考研 | 自考 | 在职研 | 外语 | IT | 公务员 | MBA | 舞蹈
推荐:如何戴上硕士帽 | 上海培训学校大全 | 学习交流交友 | 外语学习资料

特别说明:由于各方面情况的不断调整与变化,教育人生网所提供的所有考试信息仅供参考,敬请考生以权威部门公布的正式信息为准。

来源:网络    责任编辑:GTF  


 相关资讯 关键字:  相关课程

 ·写Java程序最容易犯的21种错误  2007-8-2
 ·怎样才能达到高效开发与彻底测试  2007-8-2
 ·单元测试指导  2007-8-2
 ·使用五个安全测试步骤来保护你的应..  2007-8-2
 ·安全测试方法  2007-8-2
 ·拯救Windows XP操作系统崩溃的救命..  2007-8-2

 ·无相关课程

 
主编推荐 更多   最新资讯 更多   经典下载 更多
2008英语四六级考前辅导专题
2008英语四六级考前辅导专题
 
 网上报名 优惠便捷
 
 
 求学热点关注
研修 | MBA/EMBA 在职研究生 短训研修
学历 | 普通高校 自考成考 网络院校 中外合作
外语 | 中高级口译 日语 四六级 新概念 雅思
综合英语 商务英语 口语听力 小语种 托福
职业 | 报关报检 物流 会计上岗证 会计电算化
外贸
其他 | IT职业 平面设计 网页设计 辅助设计 考研 中小学辅导 夏令营 舞蹈 瑜珈 音乐
 
 
 论坛精华 求学交友
雅思 |
张红岩《TOEFL iBT词以类记》完整版(..
日语 |
新版 标日在线教学视频 初上1
口译 |
上海中高级口译考试全解析专题
考研 |
微观经济学(高鸿业)各章重点小结PDF
职业 |
【职业资格专题】邮政营业员试题
舞蹈 |
舞蹈大比拼,选择你喜欢[舞蹈特别专题]
 
 热点专题
IT就业培训
 
上海中高级口译完全解析
2008英语四六级考前辅导
教育人生网真题中心正式上线
上海中高级口译考试全解析
在职研究生报考指南
2007年12月四六级真题
2000-2007日语能力考真题..
2008在职硕士备考指南
2008年注册会计师备考专题
高等教育自学考试完全指南

教育新闻 - 免费资料 - 搜索中心 - 名校荟萃 - 北斗论坛 - 会员中心 - 主编信箱 - 网站地图 - 欢迎批评指正 设定本页为浏览器首页
教育人生网简介 - 联系我们 - 招贤纳士 - 客服中心 - 免责声明 - 广告服务 - 火爆加盟 - 中国教育搜索