【问题标题】:Get just the test data for a spec'd function仅获取指定功能的测试数据
【发布时间】:2018-10-10 16:51:27
【问题描述】:

我有没有办法只为以前用fdef 指定的函数生成测试数据?换句话说,我想拥有check 的功能,但最多只是为我生成一些参数集,而不是运行函数并检查输出是否正确。

或者,如果可以查找函数的参数 (:args) 规范,那么这将实现与我可以从中制作生成器相同的目标。

【问题讨论】:

    标签: clojure clojure.spec


    【解决方案1】:

    我认为最简单的方法是单独定义您的 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2019-12-21
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多