Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure.spec:如何规范对随机更改敏感的数据结构?_Clojure_Automated Tests_Tdd_Clojure.spec - Fatal编程技术网

Clojure.spec:如何规范对随机更改敏感的数据结构?

Clojure.spec:如何规范对随机更改敏感的数据结构?,clojure,automated-tests,tdd,clojure.spec,Clojure,Automated Tests,Tdd,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 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))
(其中,
gen
clojure.test.check.generators
clojure.spec.gen.alpha

现在,规范的谓词仍然是
string?
,但是从该规范生成的值将始终来自
{“good.txt”“bad.txt”}
。您可以通过多种方式进行合成,例如,您可以制作一个生成器,该生成器在约50%的时间内从字符串集中提取,并在约50%的时间内生成一个纯“随机”字符串

仅供参考
clojure.spec.test.alpha/check
还采用
opts
映射,允许您覆盖/指定生成器