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

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP