1

この質問とそこで参照されているブログ投稿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 のようなブロック内で生成された値への参照を許可するように砂糖/魔法を拡張します。

これを可能にする何かが他にない場合、または何らかの理由で実装する意味がない場合はお知らせください。

4

2 に答える 2

6

この機能はおそらく現在の機能よりも便利であることに同意for-allします。変更されていない主な理由は、下位互換性のためです (確かに、古いスタイルを使用するコードは壊れませんが、以前ほど縮小されないだけです)。

しかし、モナドだけでなく、より多くのオプションが利用可能です:

  • gen/let、 -style バインディングを使用しletます (これは のドロップイン置換ではありませんが、for-all一緒に使用できます)
  • com.gfredericks.test.chuck.generators/fortest.chuckヘルパー ライブラリで定義されています。gen/let
  • com.gfredericks.test.chuck.properties/for-all、同じライブラリにありドロップインの代替品ですfor-all
于 2015-12-29T00:31:49.847 に答える