关于这个问题,以及那里引用的博客文章,有没有理由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 ... ))
基本上,我想重新使用产生的值通过在另一发电机一个发电机,然后引用二者实际测试码内产生的值.这实际上将糖/魔法扩展for-all
为允许引用由宏提供的let-like块内的生成值,因为它在下面的表达式块中起作用.
如果我遗漏了其他可能使其成为可能的内容,或者由于某种原因而无法实施,请告诉我.
我同意这个功能可能比for-all
目前的功能更有用.它没有被改变的主要原因是向后兼容性(尽管使用旧样式的代码不会破坏,它不会像过去那样收缩).
但是你有更多选择,而不仅仅是monad:
gen/let
,它使用let
-style绑定(它不是替代品,for-all
但你可以一起使用)
com.gfredericks.test.chuck.generators/for
在test.chuck帮助程序库中定义- 它就像一个发烧友版本gen/let
com.gfredericks.test.chuck.properties/for-all
,在同一个图书馆,这是一个替代品for-all