仅获取规格功能的测试数据

时间:2018-10-10 16:51:28

标签: clojure clojure.spec

我是否可以只为先前用C:/Users/mysuer/Desktop/firma/cert/acceso_ws_tspcrypto.p12指定的功能生成测试数据?换句话说,我希望具有fdef的功能,但最多只能为我生成许多参数集,而不是运行函数并检查输出是否正确。

或者,如果可以查找函数的参数(check)规范,则将达到与我可以从中生成一个生成器相同的目标。

1 个答案:

答案 0 :(得分:3)

我认为最简单的方法是分别定义您的args规范,以便您可以在fspec中使用它,并在以后轻松地将其用于个人一代。

(defn foo [x] (inc x))
(s/def ::foo-args (s/cat :x number?))
(s/fdef foo :args ::foo-args)
(gen/sample (s/gen ::foo-args))
=> ((2.0) (-1.5) (0) (1) (1.0) (-1) (1.5) (0.5) (-5.0) (-7))

如果您无权直接访问原始的:args规范,这是一种从fspec重新创建它的笨拙方法:

(s/fdef foo :args (s/cat :x number?))
(def foo-args-spec
  (eval (->> (s/get-spec `foo)
             (s/form) ;; get original fspec form
             (rest) ;; discard fspec symbol
             (apply hash-map) ;; put fspec kwargs into map
             (:args))))
(gen/sample (s/gen foo-args-spec))
=> ((0.5) (-3.0) (-1.5) (2) (-1) (-5) (-1.75) (-2) (-13) (2.3828125))