TDD之驱动程序和占位程序,和类的接口与实现

本文深入探讨了测试驱动开发(TDD)原则,特别是如何通过驱动程序独立测试每个函数,以及封装与接口在类设计中的重要性。通过实例展示了如何将类的接口与实现分离,以及在实际编程中的应用。重点介绍了如何使用驱动程序测试基本函数,如输入和输出函数,并使用占位程序测试剩余函数。最后,文章强调了在测试函数时,确保所有其他已测试函数的完整性的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

            TDD 测试驱动开发,每一个函数都应该作为一个独立于程序其他部分的单元进行设计,编码和测试。当我们将各个函数都视作独立单元时,就可以把一个大的任务划分为一系列较小的,更易操作的任务。但如何在程序之外对本应包含于其中的一个函数进行测试?方法之一是写专门用来测试函数的程序,像这样的程序就叫做驱动程序


         如果对每一个函数都进行了单独测试,你就能发现程序中的绝大部分错误,而且,还可以发现哪个函数有什么样的错误。如果只是对整个程序进行测试,也许仍然可以发现其中是否出错,但并不知道是哪儿出错了。一旦完全测试了某个函数之后,就可以将该函数用到其他函数的驱动程序中。每一个函数都应该放在程序中进行测试,而且测试程序中只有待测试的函数是没有被测试过的。但是,在测试其他函数时最好使用经过完全测试的函数,如果发现了bug,你就可以知道bug是在未经测试的函数中。有时,完全不使用未编写和未经测试的函数去测试另一个函数是不可能或者比较麻烦。在这种情况下,你可以使用这个缺失或未经测试的函数的简化版。这种简化了的函数称作占位程序。这些占位程序无需进行完全正确的计算,但它们可产生足以用于测试的值,而且非常简单,在运行时可以提供便利。使用带占位程序的程序描述允许你测试并修改基本的程序描述。这优于编写一个新的,完整的程序去测试各个函数。基于这个原因,带占位程序描述通常是进行测试的有效方法。一个通用的方法是使用驱动程序测试一些基本函数,例如输入和输出函数,然后使用带占位程序的程序描述测试剩余的函数。每次使用一个函数来代替相应的占位程序:首先使用一个完整的函数定义来代替占位程序,并进行测试;一旦该函数测试完毕,就使用另外的函数来代替相应的占位程序,以此类推,直到产生最后的程序。


测试函数的基本准则:

         任何一个函数都应该放在某个程序中进行测试,而且这个程序中除了被测试 函数以外的所有其他函数都已经被完全测试和调试过。

 

          封装就是要求定义的类能让程序员不需要关心类中的具体实现细节,,使用该类的程序员知道如何使用该类即可,这些如何使用类的比标准就称为接口或者API。(API在此就是如何使用类的标准)这种将接口和实现分离的类称为抽象数据类型(ADT)


定义一个C++类,分清接口和实现

        变量声明    成员函数声明(及注释)   成员函数定义      

私有     实现          实现                实现                    
公有     实现          接口                实现     
                                                                                                                             




 class DayOfYear
{
public:
    void input();
    void output();

    void set(int newmonth, int newday);
    void set(int newmonth);

//前提条件
//执行结果

    int getMonthNumber();
    int getDay();
    
private:
    char firstL;
    char secondL;
    char thirdL;
    int day;
};



     将类的接口和实现分离,一个最明显的好处就是在修改类的具体实现代码时,无需修改程序的其他部分。有助于项目分工,如果类的接口设计良好,那么当一个人在编写类的实现代码时候,其他人可以同时使用该类编写代码。








1.敏捷开发强调测试先行,因为先编写测试代码,就可以有目的的预防某些bug的产生,要知道,治病不如预防!!!所以我个人觉得这个还是比较重要的,文件也不大,只有8M,但是高清。 2.本版本网上其他资源不同之处在于,此版本可进行编辑,搜索,已进行内容识别扫描。可全选,可编辑,可剪切文字。 部分目录如下: 目录 第一部分资金实例 第1 章多币种资金··························································································································3 第2 章变质的对象························································································································10 第3 章一切均等····························································································································13 第4 章私有性·································································································............................... 16 第5 章法郎在诉说........................................................................................................................ 18 第6 章再谈一切均等.................................................................................................................... 21 第7 章苹果桔子........................................................................................................................ 25 第8 章制造对象····························································································································27 第9 章我们所处的时代................................................................................................................ 31 第10 章有趣的Times 方法.…....….. …... …..... ….. ….... …... ….. ……….... …... ….. …….... ……... ……...... 36 第11 章万恶之源.......................................................................................................................... 41 第12 章加法,最后的部分..…..….. ….... …... ….... …..... …... ….. ….. …..... ….. …... …....... ……………· ….. 44 第13 章完成预期目标.................................................................................................................. 48 第14 章变化.................................................................................................................................. 53 第15 章混合货币.......................................................................................................................... 57 第16 章抽象,最后的工作.......................................................................................................... 61 第17 章资金实例回顾.................................................................................................................. 65 . 下一步是什么? •••••••••••·••••••••• 暹···········…...... 匿·…... …......... 霉.........…········· 暹....….. 查......................... 65 比喻66 JUnit 的向.法::::::::::::鲁....愈::::::::::::::::::::::::::::::::::::::::::::::::::::董:::::::::::::::::::::::::::::::::::::::::::::::::::::::66 代码统计.......................................... 夔················…................................................................ 麟..... 67 过程............................................................................................................................................ 68 了:回顾::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 第二部分xUnit 实例 第18 章步入xUnit ......................................... 簪.........…......... …....... ….... …..................................... 73 第19 章设置表格··················--.. ·········.. ··••• 暹........... 薹··································"······"·····…................... 77 第20 章后期整理................. 畛················............................................................ 爹...参................….... 80 第21 章计数.......................................................................................…................................... ….. 83 第22 章失败处理.......................................…... 窜........….. ….............................. ….. ….... …............... 86 第23 章如何组成一组测试...........雪…………………..………………………………………….. 霞...…………….. 88 第24 章xUnit 回顾.............雪...... 暹........... 匿········ 摹…················--雹............ …............ 霉….........…............. 93 第三部分测试驱动开发的模式 第25 章测试驱动开发模式会....................…........... 吻.....……..... ……....... 诊....………………………......... 97 测试(名词)暹.雪.... 雪......................…......................................... 崎................................................. 97 相互独立的测试(Isolated Test) ……..... …·…….......... …………………………...... …………….... 雀..... 98 测试列表(Test List) ................................................... 豪....................…..... …........................... 99 测试优先(Test First) 断言优先 (Assert First;·::::::::::::::::::::::二 ::::::::::::::::::::神: ....:::...:.......二二厂::::厂厂 100 101 测试数据(Test Data) .显然数据(Evident Dat~·;··:::::::::::::::::::::::::::::::::::::: 二二:::::::::::::::::::::::::::::::::::::::::::…::::: 102 103 第26 章不可运行状态模式104 一步测试(One Step Test)··:::::::::: 二:....:..:墓:::::::二:厂二二二::::::::::: 二勹二二::..二二:: 104 启动测试(Starter Test) ................................... 金.......…·······....................... 渗........................... 105 说明测试<Explanation Test) 106 学习测试(Leaming Test) .... 二二二二二二二二二二二二二二二二二二二二二二二: 106 另外的测试 回归测试(;~鲁酝已卢;比~~;噜:::::::::::::: 二..二:.:二二二二二二:.二:::::::::::::::::::::::::::: 108 107 ::开 闷:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::缴:惫:::::::::: 便宜的桌子,舒适的椅子…………........……·…………………· ……………..... …………………………... 110 第27 章测试模式................…........ ….......................... 愈............................................................... 111 子测试(Child Test) .......... 筝.............….................................... 噙.............................................. 111 模拟对象(Mock Object) . …...... 摹.......………………·……………………………………………………· …111 :::1言lf(:n~~~~·;···::::::::::二::::::::::::::::::::::::::::::::::::::::::::::: 二::.二:.:.. :::....}}: 清扫割试死角(Crash Test Dummy) . ……... ………· ……………... ……….. …………......... …….. ….. 114 昙需它需心为芯芯;沁五::::::::::::::::::::::::::::::::::::睿 ......查::::::::::::::::::::::::::::::::::::::::::: :~! 第2~伪!:~昙,~:动了二::.二:./.二:.二二二:...::二二:/二三:.靡:...二::::::::::::::::: !!; 三角法(Triangulation) .... 暹........ 参...................................................................佛....................... 119 显明实现(Obvious Impl ementatlon) ….................... 拳...............................…......................... 119 从一到多(One to Many) ........................................ …....... 匿.............….................................. 120 第29 章xUnit 模式 断言 (Assertion).. 二二二.二二二::::.二:::::::::::::::::::::::::看 :.:..令::::::::::::::::::::::::::::::::::::::: 122 122 固定设施(Fixture) ............................................................................................................... 123 ;古婴:哼宁:st(贮笠:飞F~~~~~-~...:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ~ 芦 异常测试(Exception Test) . …... ……....... …....... ………... …............... 争............. …·鲁............. 令奄.... 127 全部测试(All Tests) ..................... 耄..令......................................... 伞......................................... 127 第 3~命:巴尸尸式..:. .::.: ..: :::.,二:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;~~ 值对象簪............... 逾............................ 雪... 潭.................................................................................... 131 盓:去:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ~!! 插入式对象 插入式选择霹:::::: 二::::::::::::::::::::::令: ........:噜:::::::::::::::::::::::::::::::::::::::::::::::::::::::::135 134 工厂方法.................................... 参·········"···········...........................................噜..............….......... 137 递归:::::::::参::::::::::::::::::::::::::::::::::::::::::参:::::::::::::::::::::::::::::::::::睿...集:::::::::::::::::::::::::::::::: :~; 收集参数 单例模式亭~~-;心如~;--·::::::::二二:.二二二二二二二二二二二二二二:.. :.二:../...: 140 141 第31 章重构........................................................................................................................…..... 142 调差异( Reconcile Differences) . …………………….. ……………………........ 萼..........……….. …... 142 隔离变化(Isolate Change) 帚...……………………........ …...... ……………... …………· …….. ………….. 143 :芯:亡::~!:~~==~;··::: 勹....勹勹:::::::二/..::/厂:.二:::::::::二二二二二二:..::::: ;芯之笘:芦::兄芯立立e)鲁·:参:.:.:.:食::::::::: 俺.. :..:二:::::::::::::::::::::::: 二:参:..二::::::::::::::: 二.::::..:芯 转移方法(Move Method) ………· ….. ……..... ……….... ………..... ………............. ………………....... 147 方法对象(Method Object) .. …………· ……….. ……………......... ……………….... …………………….. 148 添加参数(Add Parameter) …….. ….. ……………………………..... ……………..... ……………..... ….... 149 把方法中的参数转变为构造函数中的参数••• 重..............................................……....... …........ 149 第32 章掌握TDD ….....…….. ……..... ………….. ……………………...... ……………………………….. …... 夸... 150 附录沁尸尸严:::::::::::::::::::::::::::::::::睿 :.二:::::::::: 二:.:::二:.二:::.:.:::..::.::.:.::::.:..::::.二.:::::二二:.:::二腐 附录B 斐波纳契数列.…………·.........·….. …………....... ·······………….. 睿... 夸................. ….............. 食摩.. 164
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值