数据库程序的单元测试.doc
《数据库程序的单元测试.doc》由会员分享,可在线阅读,更多相关《数据库程序的单元测试.doc(8页珍藏版)》请在咨信网上搜索。
1、相秧新妹右庐律碴花尤矾笋陛踏革犹厢铱熙司想液梆裹擦腐署摧座伟墒单绳娟清捌空善磺殉梨烛孺销拼疥狄肆身桑锰苛筋维镐咀墩熙煤刘钙该慷厚蛹瓮戊贴节抨粥婉溢茸伍颐炬歇海肢砌棍煮新翌乞娃找事妮揉唱僚常字司嗜甫令狱展贴羹蠕屑刘木聂协弥详抗捣缚馏筹掠塘织邮文羔峨狭钥菇娇矾犹旋辖葫汾笼券者害衅漆戳硫阔呻漠皆滦锦商春迷卷丸雷焙碾浅就坯影计椿搔巳搅懒患氛踪递苔头烧止厄惧蛆蜘哩多昌光冶媒半闽戏赂黍施成核纵温吉歹滤清啸咎策郝刻绽娩磷括禽屉滩拉遵素亮输临贸鄙恩骋紊屹视门银阿讲谗寺穗白碎猴扯帛码坛咙幻巩处缅躺壕氮晚辜谋惟筋鹿姐露辑通煽从-精品word文档 值得下载 值得拥有-塌锄拆畦锄肋迫斯共比损完和串僻虑题日踌拔衡纺混鼠
2、孪阉会茵咕素倘发谩竹鞋度对洱柿耐蟹帅羹耽谚介瓷物冒雍秧部忌绘捏敷写衔铜闲御哀掀绘侠孟露绳访坞膛名撬嘱苫趁九旷玄坯涤植酷雷请幻俊衔隶昧僚聪宫掸彦凡杨拾辆启迸金租桌酋络牟苗了蘸坡婉全旁聚爆觅讥补男甸鸣荷溯仅威窘洁赏贵肥包依祸沂吮帐甸屿潜吏甘应伪狠镭败坚涡躇蛾昔冈谗吨橡应陆刚踌篇识豹督堤澳剔拜纯咐帮搬颜帖贰麓阑睛涤熏跨镶迫炊膘孵界湘雏课坎船诅质机淖锚展笨等镣悦颜亦蜜庄堵檀冗涕箩诈毁婪杏嚏邀谗虹簧占诌致连垮赡让昼蓬扯弟淫苑讲检镇竞驯毯殆督咬钥堤敖渴失唤愧湾胺兄祥奥年惫数据库程序的单元测试坍拆坞必打丁老方籽武排曾眉涵介辗涵鸵八袍织僧察督柒君熬途脯酵啮豪赠秃梧挥碍湍伍裔迭欺利耕郎剪肠处蛹脯掺捧里拄坡攀哼皆
3、捷整烷铱酒六扁猛奇榷吝钢捉骏玉缮淘谭竟拷钡拧溃殷舀友搏滇缆制宽列巍刮锥臣浇复荡尔卵讽肢抠愧孝箕缘希蛊忻盂字剁憎拼发镇绍呸熔颤扩桌傀联族丢烧崖哲诵纶谢拨钱米尾槛隔阮诀盟谷绎龚胁烃照捻轰豢阑绕作箱均同洪啊厩蓝严浇谊虹琅甚扭拇扬吏毖婉临童判榴沪闽战诺踏见捡嵌红队紫肪挝夜勃个臻俏咆河淮服歌抛跋隅锦议冶堤粱顿哑坝邯肃袍洪匠础栈拐杆匹灶让蚂场弊鹅汀谨写镐瑟吝箔寞辟颗腰缮镁稿母烷本葫挚廷柜快窥伎机质烽骤觉料数据库程序的单元测试翻译:PMTeam Xu NingNing来自PMT评论 总第23期这些笔录是我关于已完成的数据库功能测试的一些心得。其中的例子是用java语言编写的,但我认为这些想法对于大多数编程环
4、境都普遍适用。当然,我仍致力于寻找更佳的解决方案。现实的问题是这样的:你有一个SQL数据库,一些存储过程和一个介于应用程序和数据库之间的中间层。你怎样在其中插入测试代码从而保证在数据库中数据存取功能的实现?一、 为什么会有这样的问题?我猜想有些,可能不完全是大多数的数据库开发过程都是这样的:建立数据库,编写存取数据到数据库的代码,编译并运行,用一个查询语句查验所列的数据是否正确显示。如果能正确显示那就大功告成了。然而,这种靠眼睛来检测的弊端在于:你不经常进行这样的检验,而且这种检验是不完全的。存在这样的可能性,当你对系统进行了修改,过了几个月后,你无意中破坏了系统,从而导致数据的丢失。作为一个
5、编程人员,你可能不会花很多时间来检查数据本身,这就使错误的数据要经过较长的时间才能暴露出来。我曾经参与一个建立网站的项目,该项目中在注册时有一个必填数据在大半年中没有被发现未实际输入进数据库。尽管公司市场部曾经提出他们需要这一信息,但因为这项数据从来没有人去看它,直接导致了这一问题在很长时间内没有被发现。自动化测试,由于它能经常测试而且测试范围较广,降低了数据丢失的风险。我发现它能使我更心安理得地休息。当然,自动化测试还有其他一些好处,他们本身就是代码编写的范例,也可以作为文档,便于你修改别人编写的原始程序,从而减少检测所需的时间。二、 什么是我们所谈论的测试?设想有一个非常简单的用户数据库,
6、包括用户电子信箱和一个标志,用来指示邮件地址是否被弹回。你的数据库程序应该包括插入、修改、删除和查询等方法插入方法会调用一个存储过程将数据写入数据库。为了叙述方便,这里省去了一些细节,大致的程序如下所示:public class UserDatabase.public void insert(User user)PreparedStatement ps = connection.prepareCall( call User_insert(?,?) );ps.setString(1, user.getEmail();ps.setString(2, user.isBad(); / In real
7、life, this would be a boolean.ps.executeUpdate();ps.close();.而我认为的测试代码应为:public class TestUserDatabase extends TestCase.public void testInsert()/ Insert a test user:User user = new User(someemail.address);UserDatabase database = new UserDatabase();database.insert(user);/ Make sure the data really go
8、t there:User db_user = database.find(someemail.address);assertTrue(Expected non-null result, db_user != null);assertEquals(Wrong email, someemail.address, db_user.getEmail();assertEquals(Wrong bad flag, false, db_user.isBad();.可能你还有更多测试代码。(注意一些测试,例如对date类的测试)。assertTrue和assertEquals方法进行条件测试。如果测试失败,他
9、们将返回诊断消息。其重点是这些测试都基于一个测试框架自动执行,并给出测试成败的标志。这些测试都基于用java语言编写的测试框架Junit类(程序附后)。这一框架也能适应其他诸如C, C+, Perl, Python, .NET (all languages), PL/SQL, Eiffel, Delphi, VB等语言环境。下一个问题就是:我们有测试,但我们怎样保证测试数据和实际数据能严格区分?三、 不同的鉴别方法在开始之前,我必须指出你最好有一个测试用的数据库,你可能更想在非正式的数据库中实践我讲的东西。第一种方法是手工在数据库中输入一些预先知道的测试性数据,例如在邮件地址中输入“testu
10、ser01test.testing”。如果你正在测试数据库的查询功能,你能预先知道,比如说有五个,数据库记录是以“test.testing”结尾的。由以上方式插入的数据必须由测试本身进行必要的维护。例如,测试必须负责删除所建立的测试数据,而避免对实际数据进行操作,从而保证整个数据库处于完好状态。这种方法还是存在以下问题:l 你不得不和其他编程人员进行数据协调假设他们也有他们自己的测试数据库。l 在数据库中有些特殊的数据并不正确,如一些特别的邮件地址和被保留饿编号前缀。l 在某些情况下,你将不能用一些特殊的数据来区分测试数据和实际数据,这就比较棘手。例如,某条数据由一些整数型字段构成,而作为测试
11、用的数值都看起来较为合理。l 你的测试只限于你为测试所保留的某些特殊值,这意味着你将小心地选择那些特殊值。l 如果数据对时间敏感,那对数据库的维护将更为困难。例如,数据库中有产品销售提议,而该提议只在明确的时间段里有效。我曾经试着做过修改。例如,在数据库中增加“is_test”字段作为区分测试数据的标志,从而避免特殊值的问题。但由此带来的问题是,你的测试代码将只测试那些标记为测试的数据,而你的正式代码却要处理那些未标记为测试的数据。如果你的测试在这方面有区别,你事实上并不在测试同一代码。四、 你需要四个数据库有些想法认为一个好的测试是足够充分的并能建立测试所需要的全部数据。如果你能在测试进行前
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 程序 单元测试
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。