xUnit 测试模式: 摘要

来源:互联网 发布:中国国家数据网 编辑:程序博客网 时间:2024/04/20 06:47

 

xUnit测试模式--测试码重构

 

“脆弱测试”问题15a15c15ac151515c151515a15a15

4017使用商业“记录与回放”或“机器人用户”工具的测试自动化在这些工具的早期用户中名声狼籍.a使用这种方法的自动化测试通常因为看起来不太重要的原因而失败.a重要的是要理解这类测试自动化的局限性,16以免落入与它相关的陷阱——即行为敏感性.c接口敏感性.c数据敏感性和上下文敏感性.a16a16c16ac161616c161616a16a1640181.c行为敏感性17a17c17ac171717c171717a17a174019如果系统的行为发生改变(例如,18如果需求改变,18并且系统被修改以满足新需求),18重放时,18执行修改后功能性的测试很可能失败2.a不管使用什么测试自动化方法,18这就是测试的基本事实.a实际问题是,18通常需要使用这种功能性将系统设置到正确状态来启动测试.a因此,18行为变更对测试过程的影响比人们预期的更大.a18a18c18ac181818c181818a18a1840202.c接口敏感性19a19c19ac191919c191919a19a194021通过用户接口测试被测系统(SUT)内的业务逻辑不是一个好主意.a甚至是对接口的细小变更都可以导致测试失败,20虽然人类用户可能说测试仍然应该通过.a在过去几十年内,20这种无意识的接口敏感性给测试自动化工具带来了不好的名声.a不管使用哪种用户接口方法,20总是会出现问题,20有些类型的接口似乎更糟糕.a图形用户界面(GUI)是与系统内业务逻辑交互的特别具有挑战性的方法.a最近使用基于Web(HTML)的用户界面让测试自动化的某些方面变得更容易,20但也产生了另一个问题,20因为HTML内的可执行代码需要提供丰富的用户经验.a20a20c20ac202020c202020a20a2040223.c数据敏感性21a21c21ac212121c212121a21a214023所有测试都要假设某个起始点,22这个起始点称为测试夹具.a测试上下文有时称为测试的“前置条件”或“之前状态”.a通常依据系统中已有的数据定义测试夹具.a如果数据改变,22测试就可能失败,22除非努力让它们对使用的数据不敏感.a22a22c22ac222222c222222a22a2240244.c上下文敏感性23a23c23ac232323c232323a23a234025系统的行为可能受到系统之外事物状态的影响.a这些外部因素可能包括设备(例如,24打印机.c服务器)的状态.c其他应用程序或系统时钟(例如,24测试执行的时间和/或日期).a如果没有控制上下文,24受该上下文影响的所有测试都很难确定地重复.a24a24c24ac242424c242424a24a24

 

测试自动化的目标

42273.3.1cc测试应该有助于提高质量1526a26c26ac262626c262626a26a2642283.3.2cc测试应该有助于理解SUT1627a27c27ac272727c272727a27a2742293.3.3cc测试应该降低(而不是引入)风险1628a28c28ac282828c282828a28a2842303.3.4cc测试应该易于运行1729a29c29ac292929c292929a29a2942313.3.5cc测试应该易于写和维护1930a30c30ac303030c303030a30a3042323.3.6cc随着系统的发展,31测试应该只需要最低限度的维护2031a31c31ac313131c313131a31a31 

测试自动化的原则

42505.2.1cc原则:首先写测试(也称为测试驱动开发.c测试优先开发)2749a49c49ac494949c494949a49a4942515.2.2cc原则:易测性设计2850a50c50ac505050c505050a50a5042525.2.3cc原则:使用前门优先(也称为前门优先)2851a51c51ac515151c515151a51a5142535.2.4cc原则:交流意图(也称为高级语言,52简单易读)2852a52c52ac525252c525252a52a5242545.2.5cc原则:不要修改SUT2853a53c53ac535353c535353a53a5342555.2.6cc原则:保持测试独立(也称为独立测试)2954a54c54ac545454c545454a54a5442565.2.7cc原则:隔离SUT2955a55c55ac555555c555555a55a5542575.2.8cc原则:最小化测试重叠3056a56c56ac565656c565656a56a5642585.2.9cc原则:最小化不可测试的代码3057a57c57ac575757c575757a57a5742595.2.10cc原则:保持测试逻辑与产品代码分离(也称为产品代码中无测试逻辑)3158a58c58ac585858c585858a58a5842605.2.11cc原则:每个测试验证一种条件(也称为单一条件测试)3159a59c59ac595959c595959a59a5942615.2.12cc原则:单独测试关注点3260a60c60ac606060c606060a60a6042625.2.13cc原则:确保相同标准的努力和责任3261a61c61ac616161c616161a61a61

暂时夹具管理

42098.3cc建立新鲜夹具61108a108c108ac108108108c108108108a108a10842108.3.1cc内联夹具建立61109a109c109ac109109109c109109109a109a10942118.3.2cc委托夹具建立62110a110c110ac110110110c110110110a110a11042128.3.3cc隐式夹具建立63111a111c111ac111111111c111111111a111a11142138.3.4ccSetUp方法的滥用64112a112c112ac112112112c112112112a112a11242148.3.5cc混合夹具建立65113a113c113ac113113113c113113113a113a11342158.4cc拆卸暂时新鲜夹具65114a114c114ac114114114c114114114a114a114 

永久夹具管理

42199.2cc管理永久新鲜夹具67118a118c118ac118118118c118118118a118a11842209.2.1cc什么让夹具变得永久67119a119c119ac119119119c119119119a119a11942219.2.2cc永久新鲜夹具产生的问题68120a120c120ac120120120c120120120a120a12042229.2.3cc拆卸永久新鲜夹具68121a121c121ac121121121c121121121a121a12142239.2.4cc避免拆卸的需要71122a122c122ac122122122c122122122a122a12242249.2.5cc处理缓慢测试72123a123c123ac123123123c123123123a123a12342259.3cc管理共享的夹具72124a124c124ac124124124c124124124a124a12442269.3.1cc访问共享夹具73125a125c125ac125125125c125125125a125a12542279.3.2cc引发共享夹具结构73126a126c126ac126126126c126126126a126a1264

结果验证

423110.2cc让测试自检77130a130c130ac130130130c130130130a130a130423210.3cc状态验证78131a131c131ac131131131c131131131a131a131423310.3.1cc使用内置断言79132a132c132ac132132132c132132132a132a132423410.3.2ccDelta断言80133a133c133ac133133133c133133133a133a133423510.3.3cc外部结果验证80134a134c134ac134134134c134134134a134a134423610.4cc验证行为80135a135c135ac135135135c135135135a135a135423710.4.1cc过程行为验证81136a136c136ac136136136c136136136a136a136423810.4.2cc预期行为规范82137a137c137ac137137137c137137137a137a137423910.5cc减少测试码复制82138a138c138ac138138138c138138138a138a138424010.5.1cc预期对象83139a139c139ac139139139c139139139a139a139424110.5.2cc自定义断言84140a140c140ac140140140c140140140a140a140424210.5.3cc结果描述验证方法84141a141c141ac141141141c141141141a141a141424310.5.4cc参数化测试和数据驱动测试85142a142c142ac142142142c142142142a142a142424410.6cc避免条件测试逻辑86143a143c143ac143143143c143143143a143a143424510.6.1cc排除if语句87144a144c144ac144144144c144144144a144a144424610.6.2cc排除循环87145a145c145ac145145145c145145145a145a145424710.7cc其他方法88146a146c146ac146146146c146146146a146a146424810.7.1cc逆向操作,147由外到内88147a147c147ac147147147c147147147a147a147424910.7.2cc使用测试驱动开发来写测试实用程序方法88148a148c148ac148148148c148148148a148a148425010.8cc将可重复使用的验证逻辑放在哪里89149a149c149ac149149149c149149149a149a149 

使用测试替身

425411.2cc什么是间接输入和间接输出91153a153c153ac153153153c153153153a153a153425511.2.1cc为什么要关注间接输入91154a154c154ac154154154c154154154a154a154425611.2.2cc为什么要关注间接输出92155a155c155ac155155155c155155155a155a155425711.2.3cc如何控制间接输入93156a156c156ac156156156c156156156a156a156425811.2.4cc如何验证间接输出94157a157c157ac157157157c157157157a157a157425911.3cc使用替身测试96158a158c158ac158158158c158158158a158a158426011.3.1cc测试替身的类型97159a159c159ac159159159c159159159a159a159426111.3.2cc提供测试替身102160a160c160ac160160160c160160160a160a160426211.3.3cc配置测试替身103161a161c161ac161161161c161161161a161a161426311.3.4cc安装测试替身104162a162c162ac162162162c162162162a162a162426411.4cc测试替身的其他用法108163a163c163ac163163163c163163163a163a163426511.4.1cc内窥镜测试108164a164c164ac164164164c164164164a164a164426611.4.2cc需求驱动开发108165a165c165ac165165165c165165165a165a165426711.4.3cc加速夹具建立108166a166c166ac166166166c166166166a166a166426811.4.4cc加速测试执行109167a167c167ac167167167c167167167a167a167

 

组织测试

427512.4cc测试方法和测试用例类113174a174c174ac174174174c174174174a174a174427612.4.1cc每个类一个测试用例类113175a175c175ac175175175c175175175a175a175427712.4.2cc每种特征一个测试用例类113176a176c176ac176176176c176176176a176a176427812.4.3cc每个夹具一个测试用例类114177a177c177ac177177177c177177177a177a177427912.4.4cc选择测试方法组织策略115178a178c178ac178178178c178178178a178a178428012.5cc测试命名约定115179a179c179ac179179179c179179179a179a179428112.6cc组织测试套件116180a180c180ac180180180c180180180a180a180428212.6.1cc运行测试组117181a181c181ac181181181c181181181a181a181428312.6.2cc运行单个测试117182a182c182ac182182182c182182182a182a182428412.7cc测试码重用118183a183c183ac183183183c183183183a183a183428512.7.1cc测试实用程序方法位置118184a184c184ac184184184c184184184a184a184428612.7.2cc测试用例继承与重用119185a185c185ac185185185c185185185a185a185428712.8cc测试文件组织119186a186c186ac186186186c186186186a186a186428812.8.1cc内置自测119187a187c187ac187187187c187187187a187a187428912.8.2cc测试程序包120188a188c188ac188188188c188188188a188a188429012.8.3cc测试依赖120189a189c189ac189189189c189189189a189a189

 

测试味道

213c213ac213213213c213213213a213a213

代码味道

421615.1cc模糊测试(也称为长测试.c复杂测试.c冗长测试)135215a215c215ac215215215c215215215a215a215422115.2cc条件测试逻辑(也称为缩排的测试码)c146220a220c220ac220220220c220220220a220a220422515.3cc难以测试的代码152224a224c224ac224224224c224224224a224a224423015.4cc测试码复制155229a229c229ac229229229c229229229a229a229423515.5cc产品中的测试逻辑158234a234c234ac234234234c234234234a234a234 

行为味道9

424116.1cc断言滚轮163240a240c240ac240240240c240240240a240a240424616.2cc不稳定测试165245a245c245ac245245245c245245245a245a245425116.3cc脆弱测试173250a250c250ac250250250c250250250a250a250425716.4cc频繁调试(也称为手动调试)179256a256c256ac256256256c256256256a256a256426216.5cc手动干预180261a261c261ac261261261c261261261a261a261426716.6cc缓慢测试182266a266c266ac266266266c266266266a266a266 

项目味道

427317.1cc缺陷测试187272a272c272ac272272272c272272272a272a272427917.2cc开发人员没有写测试189278a278c278ac278278278c278278278a278a278428417.3cc高测试维护成本190283a283c283ac283283283c283283283a283a283428917.4cc产品缺陷192288a288c288ac288288288c288288288a288a288

模式

测试策略模式

429518.1cc记录测试(也称为记录与回放测试.c机器人用户测试.c捕获/回放测试)201294a294c294ac294294294c294294294a294a294420418.2cc脚本测试(也称为手写测试.c手动编码测试.c程序测试.c自动化单元测试)207303a303c303ac303303303c303303303a303a303421118.3cc数据驱动测试209310a310c310ac310310310c310310310a310a310422018.4cc测试自动化架构217319a319c319ac319319319c319319319a319a319422618.5cc最小夹具(也称为最小上下文)c220325a325c325ac325325325c325325325a325a325422918.6cc标准夹具(也称为标准上下文)c221328a328c328ac328328328c328328328a328a328423618.7cc新鲜夹具(也称为新鲜上下文.c私有夹具)c226335a335c335ac335335335c335335335a335a335424518.8cc共享夹具(也称为共享上下文.c遗留夹具.c重用的夹具.c陈旧夹具)230344a344c344ac344344344c344344344a344a344425218.9cc后门操作(也称为层交叉测试)c238351a351c351ac351351351c351351351a351a351426118.10cc层测试(也称为单层测试.c逐层测试或分层测试)c245360a360c360ac360360360c360360360a360a360 

xUnit基本模式

427119.1cc测试方法253370a370c370ac370370370c370370370a370a370428019.2cc四阶段测试260379a379c379ac379379379c379379379a379a379428619.3cc断言方法263385a385c385ac385385385c385385385a385a385429719.4cc断言消息269396a396c396ac396396396c396396396a396a396420419.5cc测试用例类271403a403c403ac403403403c403403403a403a403421019.6cc测试运行器274409a409c409ac409409409c409409409a409a409421419.7cc测试用例对象278413a413c413ac413413413c413413413a413a413421919.8cc测试套件对象281418a418c418ac418418418c418418418a418a418422619.9cc测试发现286425a425c425ac425425425c425425425a425a425423719.10cc测试枚举(也称为:测试套件工厂)c290436a436c436ac436436436c436436436a436a436424419.11cc测试选择 294443a443c443ac443443443c443443443a443a443 

夹具建立模式

425120.1cc内联建立297450a450c450ac450450450c450450450a450a450425720.2cc委托建立299456a456c456ac456456456c456456456a456a456426420.3cc创建方法302463a463c463ac463463463c463463463a463a463427420.4cc隐式建立(也称为:挂钩建立.c调用架构建立.c共享建立方法)309473a473c473ac473473473c473473473a473a473428120.5cc预制夹具(也称为:预制上下文.c测试台)c313429120.6cc延迟建立317490a490c490ac490490490c490490490a490a490429820.7cc套件夹具建立322497a497c497ac497497497c497497497a497a497420720.8cc建立装饰器327506a506c506ac506506506c506506506a506a506421620.9cc链接测试332515a515c515ac515515515c515515515a515a515 

结果验证模式

422421.1cc状态验证(也称为:基于状态的测试)339523a523c523ac523523523c523523523a523a523423221.2cc行为验证(也称为:交互测试)c343531a531c531ac531531531c531531531a531a531424021.3cc自定义断言(也称为:预约断言)c347539a539c539ac539539539c539539539a539a539425021.4ccDelta断言356549a549c549ac549549549c549549549a549a549425721.5cc哨兵断言359556a556c556ac556556556c556556556a556a556426521.6cc未完成的测试断言362564a564c564ac564564564c564564564a564a564 

夹具拆卸模式

427422.1cc无用单元收集拆卸367573a573c573ac573573573c573573573a573a573428122.2cc自动拆卸(也称为:测试对象注册库)c369580a580c580ac580580580c580580580a580a580428922.3cc内联拆卸374588a588c588ac588588588c588588588a588a588420022.4cc隐式拆卸(也称为:关联拆卸.c调用架构拆卸.c拆卸方法)380599a599c599ac599599599c599599599a599a599 

测试替身模式

420823.1cc测试替身(也称为冒名顶替者)385607a607c607ac607607607c607607607a607a607421323.2cc测试桩(也称为:桩)c390612a612c612ac612612612c612612612a612a612422423.3cc测试间谍(也称为:间谍.c记录测试桩)c397623a623c623ac623623623c623623623a623a623423123.4cc仿制对象402630a630c630ac630630630c630630630a630a630424023.5cc伪造对象(也称为:哑元)407639a639c639ac639639639c639639639a639a639424823.6cc可配置的测试替身(也称为:可配置的仿制对象.c可配置的测试间谍.c可配置的测试桩)412647a647c647ac647647647c647647647a647a647425723.7cc硬编码的测试替身(也称为:硬编码的仿制对象.c硬编码的测试桩.c硬编码的测试间谍)420656a656c656ac656656656c656656656a656a656426823.8cc测试专用子类(也称为:测试专用扩充)c429667a667c667ac667667667c667667667a667a667 

测试组织模式

438024.1cc命名测试套件439679a679c679ac679679679c679679679a679a679438924.2cc测试实用程序方法444688a688c688ac688688688c688688688a688a688439624.3cc参数化测试450695a695c695ac695695695c695695695a695a695430824.4cc每个类一个测试用例类458707a707c707ac707707707c707707707a707a707431224.5cc每种特征一个测试用例类464711a711c711ac711711711c711711711a711a711431924.6cc每个夹具一个测试用例类469718a718c718ac718718718c718718718a718a718432624.7cc测试用例超类(也称为抽象测试用例.c抽象测试夹具.c测试用例基类)c475725a725c725ac725725725c725725725a725a725433424.8cc测试辅助480733a733c733ac733733733c733733733a733a733 

数据库模式

434325.1cc数据库沙盒485742a742c742ac742742742c742742742a742a742435025.2cc存储过程测试488749a749c749ac749749749c749749749a749a749435825.3cc表格截断拆卸493757a757c757ac757757757c757757757a757a757436825.4cc事务回滚拆卸499767a767c767ac767767767c767767767a767a767 

易测性设计模式

437726.1cc依赖注入507776a776c776ac776776776c776776776a776a776438626.2cc依赖查找(也称为:服务定位器.c对象工厂.c组件代理.c组件注册库)513785a785c785ac785785785c785785785a785a785439526.3cc低级对象520794a794c794ac794794794c794794794a794a794430526.4cc测试挂钩531804a804c804ac804804804c804804804a804a804 

值模式

431427.1cc字面值(也称为:硬编码值.c常量值)535813a813c813ac813813813c813813813a813a813432327.2cc派生值(也称为:计算值)538822a822c822ac822822822c822822822a822a822433027.3cc生成值542829a829c829ac829829829c829829829a829a829433827.4cc哑元对象(也称为:哑元.c哑元参数.c哑元值.c占位符.c桩)545837a837c837ac837837837c837837837a837a837
原创粉丝点击