當通過QuickCheck測試失敗的屬性測試時,顯示原因的最佳做法是什麼?如何使用quickcheck顯示失敗測試屬性的原因?
考慮例如:
prop a b = res /= []
where
(res, reason) = checkCode a b
然後會話可能看起來像:
> quickCheck prop
Falsifiable, after 48 tests:
42
23
但對於調試這將是非常方便的,以示對失敗原因的快速檢查falsifable的一部分報告。
我已經破解這樣的:
prop a b = if res /= [] then traceShow reason False else True
where
(res, reason) = checkCode a b
是否有更好的/更好以上quickcheckish辦法做到這一點?
那麼,問題的關鍵是方便。成功的測試都是關於儘可能的自動化。不得不打開一個ghci會話並重新計算一個潛在的昂貴函數是沒有意義的。我的意思是,QuickCheck已經提供`collect`,`classify`來豐富*非失敗*屬性測試的輸出。這種富集是可選的,並不會降低靈活性。 – maxschlepzig 2011-01-23 12:33:23
我的意思是,這裏還有一個實際的原因:QuickCheck屬性可以是任意複雜的,所以任何給定測試的「輸出」都不一定是明顯的:你需要將你的代碼按照「嘿」 ,這裏是我感興趣的中間值!「假設你願意做這個重寫,雖然沒有理由不提供這種功能,但是IIRC QuickCheck沒有爲此目的而烘焙的東西。 – 2011-01-23 12:52:18