gpt4 book ai didi

testing - Clojure 规范与基于属性的测试库(例如 Haskell QuickCheck)有何不同?

转载 作者:行者123 更新时间:2023-11-28 19:55:22 25 4
gpt4 key购买 nike

其他语言有基于属性的测试库,比如Haskell QuickCheck . Clojure spec如何与此类图书馆不同?或者它只是一个基于属性的测试框架 Clojure

最佳答案

Clojure 的 QuickCheck 模拟是 test.check . Clojure.spec 依赖于 test.check 进行生成测试,但 spec 的用途远不止测试。

Test.check 提供用于生成和基于属性的测试的工具。 Clojure.spec 允许您为数据编写规范,并可以根据这些规范自动创建生成器。单独使用 test.check,您需要手动创建非平凡的生成器。使用 clojure.spec,生成器可以(有一些异常(exception))从您的规范中派生。

(s/def ::my-spec string?)       ;; a trivial spec, any string will do
(sgen/sample (s/gen ::my-spec)) ;; create a generator from spec and get samples
;;=> ("" "P" "B" "" "qV" "im4P" "Zf" "" "rL24" "wAV7z")

这些生成器可用于为您要测试其属性的函数生成输入数据。您可以仅使用 test.check 编写基于属性的测试,也可以使用 clojure.spec 为函数编写一些基于属性的测试。下面是一个接受字符串并返回“加倍”字符串的函数示例:

(defn doubler [s] (str s s))
(s/fdef doubler
:args (s/cat :s string?)
:ret string?
:fn (fn [{:keys [args ret]}]
(= (* 2 (count (:s args))) (count ret))))
(stest/check `doubler)

s/fdef 规范定义了我们希望函数具有的属性:它接受一个字符串,返回一个字符串,返回的字符串应该是输入。我们使用 check 来确保这些属性适用于一堆随机生成的输入。

看看 overviewguide了解更多。

关于testing - Clojure 规范与基于属性的测试库(例如 Haskell QuickCheck)有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46819642/

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