test.check生成一定长度的字符串

M S*_*ith 3 clojure test.check

在使用test.check时,我需要一个生成器来处理一定长度的字符串.电话号码,邮政编码,社会安全号码都是这类数据的例子.虽然这些例子看起来只是数字,但我的问题一般是字符串.

muh*_*huk 6

鉴于length下面的生成器生成随机字符串:

(gen/fmap #(apply str %) 
          (gen/vector gen/char-alpha length))
Run Code Online (Sandbox Code Playgroud)

(gen/vector gen/char-alpha length)生成字符序列并将其fmap转换为字符串:

(apply str [\a \b]) ;; => "ab"
Run Code Online (Sandbox Code Playgroud)

如果需要自定义alphabet(比如说[\a \b \c]),gen/char-alpha可以用以下代码替换:

(gen/elements alphabet)
Run Code Online (Sandbox Code Playgroud)

对于更复杂的发电机,就像格式化的电话号码,test.chuckstring-from-regex可能是比手动相结合官方发电机更好的选择.

  • @MSmith我特别喜欢`checking`(生成的`testing`) (2认同)