只获取指定函数的测试数据
Get just the test data for a spec'd function
有没有办法让我只为之前用 fdef
指定的函数生成测试数据?换句话说,我想要 check
的功能,但最多只是为我生成一些参数集,而不是 运行 函数并检查输出是否正确。
或者,如果可以查找函数的参数 (:args
) 规范,那么这将实现与我可以从中创建生成器相同的目标。
我认为最简单的方法是单独定义您的 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))
有没有办法让我只为之前用 fdef
指定的函数生成测试数据?换句话说,我想要 check
的功能,但最多只是为我生成一些参数集,而不是 运行 函数并检查输出是否正确。
或者,如果可以查找函数的参数 (:args
) 规范,那么这将实现与我可以从中创建生成器相同的目标。
我认为最简单的方法是单独定义您的 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))