簡體   English   中英

Clojure.spec:如何指定對隨機變化敏感的數據結構?

[英]Clojure.spec: how to spec data structures sensitive to random changes?

我正在嘗試使用clojure.spec進行交互式開發,並且函數參數的規范有一個問題,該問題不能改變太多。 例如,如果一個函數接收文件名作為參數,我可以編寫以下規范:

(s/def ::file-name string?)
(s/fdef test-fn :args (s/cat :x ::file-name))

如果我鍛煉它:

(s/exercise-fn `test-fn)

該功能將使用大量隨機文件名進行測試,這些文件名將無法讀取任何文件。 可以將文件名限制為一組有效和無效的文件名。 這對於測試來說很好,但是它將使規范特定於所選集。

這不僅是文件名,而且是任何復雜的數據結構,即使是很小的隨機更改也可能使其無用的問題。

我該怎么辦? 有相關技術或良好做法嗎?

這對於測試來說很好,但是它將使規范特定於所選集。

這是定制生成器有用的地方:

(s/def ::file-name
  (s/with-gen string? #(gen/elements #{"good.txt" "bad.txt"})))
(s/fdef test-fn :args (s/cat :x ::file-name))

(當genclojure.test.check.generatorsclojure.spec.gen.alpha 。)

現在您的規范的謂詞仍然是string? 但根據此規范生成的值將始終來自#{"good.txt" "bad.txt"} 您可以通過幾種方式來組合生成器 ,例如,您可以使生成器從大約50%的時間中使用字符串集,並為其余的50%生成純“隨機”字符串。

僅供參考, clojure.spec.test.alpha/check還帶有一個opts映射,可用於覆蓋/指定生成器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM