Получить только данные теста для функции spec'd - PullRequest
0 голосов
/ 10 октября 2018

Можно ли мне сгенерировать только тестовые данные для функции, ранее заданной для fdef?Другими словами, я хотел бы иметь функциональность check, но до генерации нескольких наборов аргументов для меня, а не запуска функции и проверки правильности выводов.

В качестве альтернативы, если возможноищите спецификацию аргумента (:args) функции, тогда это достигнет той же цели, что и я мог бы сделать из нее генератор.

1 Ответ

0 голосов
/ 10 октября 2018

Я думаю, что самым простым способом было бы определить спецификацию 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))
...