版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、百度文库好好学习,天天向上每个用例编写一到二个断言是单元测试最佳实践的常见内容.那些这么认为的是极少和只展示一个单元测试的人。因此如果你采纳他们的建议,为一个很小的运算你都需要大量的单元测试去保证质量。这篇文章意图通过例子展示,一个测试用例多个断言是有必要和有价值的。Person这个对象在数据绑定场景中经常出现,我们来看下。INotifyPropertyChangcPerson因Class-Properties滑Age当Dat«OfBirthJ?FirsiName将FullNameHHasErrors量IsChanged手LastNamemMethodswAcceptChanges“
2、ClearErrors7GetErrors1overload)rRejectchangesValidate-Events/ErrorsChanged$PropertyChanged一测试FirstName第一个来测试FirstName这个属性的设置,开始如下:TestMethod123456javakeywordH>publicvoidPerson_FirstNamc_Set()varpcrson=newPerson。'Adam","Smith");廿'Bob”;(“Bob”,;)接下来我们来测试FirstName的改变通知。TestMeth
3、od1234567publicvoidPerson_FirstName_Set_PropcrtyChanged()varperson=newPerson,'Adan】","Smith“);vareventAssert=new="Bob”;("FirstName”);)当我们执行这个测试时,会得到一个失败提示信息“期望的属性名'FirstName',但接收到的是'IsChanged'”。显然,设置FirstName的属性触发了“IsChanged”标记,我们需要把它考虑在内。因此我们把它加入:TestMethod12
4、34-2百度文库好好学习,天天向上5678publicvoidPerson_FirstNanie_Set_PropertyChanged()(varperson=newPerson("Adan】l"Smith");vareventAssert=new="Bob”;();rim(),HFullNamenotupdatedwithFirstNamechanged11);(true,J'IsChangedflagwasnotsetwhenFirstNamechanged');(“IsChanged");("FirstName
5、”);CFullName1");if(shouldHaveErrors)(,"HasErrorsshouldhaveremainedfalse*);(1,"ExpectedanErrorsChangedevent”);(HFirstNameN,FullName,IsChanged,"HasErrors11);)else("ExpectednoErrorsChangedevents1,);(,FirstNameM,FullName,MIsChangedH);)在测试代码变得令人迷惑之前,我们可以把它通用化什么程度,这里绝对有个限制.但是一个有意义
6、的测试名称,并给每个断言配一个好的描述可以让你的测试更加容易让人理解。控制变量目前所有的断言都只考虑到了测试用例的输出。他们假设每个Person对象初始状态已知,然后从此出发进行其他操作。但是如果我们想让测试更具科学性,必须确保我们能控制变量。或者换句话说,我们需要保证,一切在掌握之中。请看下面一组断言:1234'Testsetupfailed.HasErrorsisnotfalse");,"Testsetupfailed.IsChangedisnotfalse11);("Adam","Testsetupfailed,FirstName
7、isnotAdam”);("Smith","Testsetupfailed.LastNameisnotSmith");由于我们不想在每个测试的开始重复这些断言,我们可以选择把他们移到一个工厂方法中,这样我们可以保证总是拿到一个干净的对象。这个同样适用于重用这些设置去测试其他属性的测试用例。TestMethod1234publicvoidPerson_FirstNanie_Set()(varperson=GetAdamSmithO;表格式的测试之所以走到这一步,是因为“测试方法”的数量跟测试的完善程度没有关系。它们只是组织和执行测试用例一种比较方便的方式.
8、另一个组织大量测试用例的方法是表格驱动测试法.不能执行单个测试,但是仅用一行代码就可以增加新的测试用例。表格式测试里的表格可以来源于XML的文件,数据库表,写死在数组里或者只是使用同一个函数用不同的值反复调用。一些框架如MBTest甚至可以让你用属性给出测试用例,但是为了让例子轻便,我们还是坚持保持最低的共同部分。TestMethod1189101112131415161718192021222324publicvoidPcrson_FulIName_Tests()(Pcrson_FullName_Test(MBob,MJones,MBobJones”);Pcrson_FullName_Tes
9、t(MBob","Jones","BobJones*);Person_FullName_Test(HBob","Jones","BobJones");Person_FullName_Test(MBob,HJonesf*'BobJones");Person_FullName_Test(MBob,MJones*BobJones*1);Person_FullName_Test(nulLuJonesH,MJonesH);Person_FullName_Test,MJones1,HJonesM);
10、Pcrson_FullName_Test(HN,HJonesH,uJonesH);Person_FullNanie_Test(“Bob'Bob");Pcrson_FulIName_Test(HBob,null."Bob");Person_FullName_Test(HBob,"Bob");Person_FullName_Test(HBob'HN,HBobM);)privatevoidPerson_FullName_Test(stringfirstName,stringlastName,stringexpectedFullName)(varperson=GetAdamSmith();=firstName;=lastNanie;(expectedFullName,(Incorrectfullnamewhenfirstnameis'0'andlastnameis'1'"firstName?lastName?”);)在运用这个技巧时,要使用带参数的错误信息,这很重要。如果不加,你会发现在定位哪些参数组合不对时,还得一步一步调试代码。结论在为任何变量编写单元测试时,最好尝试最大化以下几个因素:有意义的单位工作量测试
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《流程图题专题》课件
- 《创意妆化妆》课件
- 2026年大型商场运营管理题库及答案
- 2026年登记注册业务考试题库(含答案)
- 2026年恶劣天气行车安全试题(含答案)
- 2026年法律法规常识:劳动法与合同法考试(含答案)
- 2026年妇科手术护理考试题及答案
- 2026年机械基础中职模拟试题(含答案)
- 2026年生物科学探索:细胞结构与功能测模拟试卷
- 2026年法务笔试模拟题及答案详解
- 初中计算机基础知识课件
- T/CCS 075-2023煤矿柔性薄喷材料喷涂施工技术要求
- 学习困难门诊规范化建设专家共识
- 高脂血症性胰腺炎护理
- 产褥期伤口的护理
- 梯形的面积教学反思
- 2025年乡村医生培训考试试题库及答案
- TAOPA 0067-2024 手持式无人机侦测反制设备技术要求
- 口腔疾病与全身疾病关系
- 加油站储存经营的危化品“一书一签”
- 《想象与思维》课件
评论
0/150
提交评论