gpt4 book ai didi

Clojure 规范 : Adding generators to an existing spec

转载 作者:行者123 更新时间:2023-12-04 08:36:28 25 4
gpt4 key购买 nike

是否有一种干净的方法可以在测试代码中添加适用于另一个源文件中定义的规范的规范生成器?例如,假设我的主 src/ 下有以下内容目录:

(s/fdef my-func
:args (s/cat
:statement (partial instance? java.sql.PreparedStatement))
:ret bool?)
为了进行生成测试,我需要一个用于 statement 的生成器争论,说一个生成模拟语句的,但我宁愿不将测试代码与生产混合,也不让使用这个库的其他项目也传递地拉下测试库。
所以我正在寻找的是一种约定,可以在现有规范之上应用生成器,而无需修改该规范的源代码。

最佳答案

clojure.spec.test.alpha/check采用可选的生成器覆盖映射:
https://clojure.github.io/spec.alpha/clojure.spec.test.alpha-api.html#clojure.spec.test.alpha/check

:gen        map from spec names to generator overrides
请注意,您需要使用命名规范,因此在上面的示例中,您需要 s/def类似 ::statement :
(s/def ::statement (partial instance? java.sql.PreparedStatement))
那么你的函数规范 :args看起来像 (s/cat :statement ::statement) .
然后你可以向 check 提供一个生成器。在您的测试项目中是这样的:
(st/check sym-or-syms {:gen {::statement my-test-proj-generator}})

a convention to apply generators atop an existing spec without having to modify the source for that spec


我想 with-gen适合于此:它采用现有规范并使用给定的生成器返回该规范。

关于Clojure 规范 : Adding generators to an existing spec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64774263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com