PLT 板


LINE

看板 PLT  RSS
※ 引述《brianhsu (坟墓)》之铭言: : 推 godfat:btw, 之前在试 scalacheck, 不过跟 2.8 相容还不完整.. 01/16 16 : → godfat:现在不知道如何了?有一阵子没注意了 01/16 16 : → brianhsu:用在 2.8 上用的话好像要抓 Snapshot 版,不过我没试过。 01/16 18 : → brianhsu:http://0rz.tw/h72zm 01/16 18 我说的 scalacheck 是这个: http://code.google.com/p/scalacheck/ 这是模仿 Haskell 的 QuickCheck 做的东西。 他主要的作法是,你提供产生 test data 的 function, 再提供一组恒为真的 function, 他则产生一定数量的随机测试。 比方说有个随机 int 产生 function 是 rand, 恒为真的 function 是 x + y = y + x 接着 QuickCheck / ScalaCheck 就会产生比方说 100 组随机测资, 如果每一个的结果都确实是 True, 则这个 check 就会过。 说着忍不住就去抓来试试了... 依照这东西, 范例中的 WrongXML 的相关测试会写成这样: (以下程式是用 scala 2.8 r20436 和 scalacheck 1.7 snapshot 测的) object CheckGeo{ // 我们产生测资的 function 是随便在几个 XML 里面挑一个出来: val gen = Gen.oneOf( <a/>, <b/>, <a><b/></a> ) // 用这方式告诉 ScalaCheck, 随机的 XML 要用 gen 产生: implicit def arbitrary_xml: Arbitrary[Elem] = Arbitrary(gen) def check = forAll{ (xml: Elem) => // 产生 WrongXML 的 trait... trait WrongXML extends LoadXML{ override def loadXML = xml } val service = new GeoService ("中央研究院") with WrongXML // 一个 check 只能检查一件事... // 不然要用 && 接起来 service.placemarkList == Nil }.check } 最後执行测试: CheckGeo.check 他会告诉你: + OK, passed 100 tests. 这东西要好用,大概得要有足够好的测资产生 function. 像是 int, random string 这种很好产生。random xml 就麻烦了。 不过有写好的话,我想可能比 unit test 更稳固一点。 虽然我们可能会陷入一个难题: 「产生测资的 function 真的是正确的吗?」 我不知道,除了测试以外,我还没有实际用过这种方式。 另一方面,范例中提到的 Mock, 看起来应该是 Stub. Martin Fowler 有一篇文章讲得很清楚: http://martinfowler.com/articles/mocksArentStubs.html 简单地说,所有的 double (替身) 有以下几种: 0. dummy, 完全没用到的东西 1. fake, 另一种实作 2. stub, 回传假的,预先设好的资料 3. mock, 会预测执行顺序与方式的东西 例如在这边如果要 mock loadXML, 可能会像是这样: stub_source = (...) mock(Source).fromURL.with(url, "utf-8").return(stub_source) 表示说等一下 Source 会被呼叫 fromURL 这个 method, 而且会收到 url, "utf-8" 这两个 argument, 然後请回传 stub_source. 也就是说,mock 是在做预测 method call 的动作。 也因此才叫 "Behavior" Driven == 多亏最近 brianhsu 板友的 Scala 文章,又继续提起对 Scala 的兴致了 不过... 今天正事就没做几件 囧> 真糟糕|||b 我自己是拿这个在做实验,有兴趣欢迎参观看看 :D http://github.com/godfat/spellbook -- 生死去来、棚头傀儡、一线断时、落落磊磊 《花镜》-世阿弥 --



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







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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP