PHP 板


LINE

看板 PHP  RSS
一直搞不懂unit test要从何做起、好处何在 最近处理比较敏感的资料 开始试着写unit test 终於慢慢知道在MVC架构中 替Model写测试的好处何在 想跟大家分享一下我的心得 好读版 http://blog.turn.tw/?p=110 ------------------------------- 在web的MVC架构中,我们开发时本来就不断在test。 你一直对网页按重新整理就是在test 你在刚写好的页面上输入一些测资然後按确定,也是在test你的controller或model 也就是testing的工作你其实一直都在做。 而MVC架构中的Model特别难处理,因为Model的行为很难测。 在资料到达Model之前,会先经过View、Controller, 所以你会来回狂测,想确定bug到底在 哪。 是jQuery在抓网页元素的value时抓错?是JavaScript相关的code有bug?是html的某个 form name打错?是Controller拿到form POST的值时做了变数型态转换? 是Controller里面变数名称打错?是丢变数给Model时顺序丢错? 还是Model里面有bug? 反覆跑完以上流程抓出bug就算了,偏偏并非每个功能都是直接在网页上key完资料就丢给 Model。 结果光是想丢测资给Model就很麻烦。尤其你修好一个method常会想确认其他method有没有 因此坏掉。 行为单纯的Model就算了,以上过程还不会花掉太多时间。 复杂一点的 Model真的是debug到会在电脑前大骂脏话。 针对Model写单元测试等於在开发Controller跟View前,先把Model弄得很强壮。 为了搞清楚自己的Model有多健康,你会写好几个test、丢好几笔测资。 加上为了要让model能被test,你会来回去修改、把model写的更模组化、更testable 、 让使用Model的人用得更愉快。 然後使用Model的人就是你自己。 所以unit test写完、测完,你再写controller跟view的时候就快乐到爆。 因为你知道写Model的那家伙很猛、把它写得很强悍(乱丢资料也不会怎样, 那个Model会丢Exception、会丢error、会吐讯息, 反正Model会强力守住最後一道关卡 资料库绝对不会烂掉。) 所以你Controller跟View就可以轻松写,顶多就是使用者key错资 料会看到exception或是一些怪怪的错误讯息,绝对不会有资料库存到坏掉的资料或是资料 一致性的问题出现。 开发上出现bug时,你也可以确定是controller或是view的资料处理出错,千错万错绝不是 Model的错。(那真的是Model有bug怎麽办?回去再写几个test抓bug,然後修好就行罗) 然後我认为,单元测试也不需要把所有可能的测资、全部使用情境都测过。 每个method随便写几个最笨的testing就很够了 ,通常有bug就是return value完全跟预期不一样。 写几个笨testing就够抓出一堆麻烦了。 像是: 资料库某table在新增完有没有多一笔 各栏位金额加总有没有等於总金额栏位 那个要抓10笔资料的method最後抓到的是不是10笔 乱丢变数给某method有没有吐Exception 只测试这些够混吧?但是最常搞出来的bug就是这麽单纯而已。 当这些testing都跑过了,你的Model已经非常头好壮壮了,超健康。 眼看自己动手去挑战自 己的Model,最後还全部过关,绝对会信心UP、UP。处理复杂的Model时, 将省下很多时间。 (就算不写单元测试,你也是用浏览器东测西测、花时间抓bug不是吗?) 好,做个整理。 时机 某Model光用想就觉得头痛,开发起来你觉得很没安全感 好处 让你跳出开发者的角度,从使用者的角度去看这些method好不好用、 直不直觉,因此能写 出更出色(reusability, maintainability, scalability)的Model 每次改完某method,都能立刻检查其他的method有没有被搞坏 更好抓bug(写testing时会在Model狂抓bug。之後写controller/view时, 你会知道bug都在controller/view里面,不用跳来跳去检查一堆code) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.167.4.247







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP