lee*_*eor 0 monads clojure test.check
关于这个问题,以及那里引用的博客文章,有没有理由prop/for-all不直接推出这种功能?例如:
(require '[clojure.test.check.generators :as gen])
(require '[clojure.test.check.properties :as prop])
(require '[clojure.test.check.clojure-test :refer :all])
(defspec some-props-test
(prop/for-all [n (gen/choose 1 10)
v (gen/vector gen/int n) ;; treat n like its produced value
e (gen/element v)]
... do stuff with n, v & e ...
))
Run Code Online (Sandbox Code Playgroud)
基本上,我想重新使用产生的值通过在另一发电机一个发电机,然后引用二者实际测试码内产生的值.这实际上将糖/魔法扩展for-all为允许引用由宏提供的let-like块内的生成值,因为它在下面的表达式块中起作用.
如果我遗漏了其他可能使其成为可能的内容,或者由于某种原因而无法实施,请告诉我.
我同意这个功能可能比for-all目前的功能更有用.它没有被改变的主要原因是向后兼容性(尽管使用旧样式的代码不会破坏,它不会像过去那样收缩).
但是你有更多选择,而不仅仅是monad:
gen/let,它使用let-style绑定(它不是替代品,for-all但你可以一起使用)com.gfredericks.test.chuck.generators/for在test.chuck帮助程序库中定义- 它就像一个发烧友版本gen/letcom.gfredericks.test.chuck.properties/for-all,在同一个图书馆,这是一个替代品for-all