Это хорошо для тестирования, но это сделает спецификацию специфичной для выбранного набора.
Здесь полезны пользовательские генераторы:
(s/def ::file-name
(s/with-gen string? #(gen/elements #{"good.txt" "bad.txt"})))
(s/fdef test-fn :args (s/cat :x ::file-name))
(где gen
равно clojure.test.check.generators
или clojure.spec.gen.alpha
.)
Теперь предикат вашей спецификации по-прежнему string?
, но значения, сгенерированные из этой спецификации, всегда будут из #{"good.txt" "bad.txt"}
. Вы можете составить generators несколькими способами, например, вы можете создать генератор, который брал бы из набора строк ~ 50% времени и генерировал чисто «случайную» строку для других ~ 50%.
FYI clojure.spec.test.alpha/check
также принимает карту opts
, которая позволяет переопределять / указывать генераторы.