你好 Clojure 专家..!,
更新:2018 年 8 月 3 日下午 1:25 CDT - 重新表述了问题以使其更具描述性。
更新:2018 年 8 月 3 日下午 4:10 CDT - 添加了负面情景测试以使其更有意义。
我有一个正在测试的函数/规范(jvm 语言),我想使用 Clojure 生成测试 API 测试正面场景(现在)。
正面场景测试:鉴于 jvm 语言是五个 {"clojure" "haskell" "erlang" "scala" "python"} 之一,结果应该是正确的。
我的问题/要求:我应该用每个可能的有效场景(我在下面的一组中列出)为每次执行(每次我运行,lein 测试)测试我的被测函数,以便我可以摆脱定期单元测试。
根据我的少量测试知识,我认为(对我来说)在同一执行中使用相同的测试场景多次测试我的功能没有任何价值。如果您认为我的思维过程是错误的,请教育我。
- 有没有办法使用 Clojure 生成测试来完成我的用例?
如果没有,这不是一个很棒的功能吗?
(ns spec.gen-test.explore (:require [clojure.test :refer :all] [clojure.spec :as spec] [clojure.test.check.generators :as gen] [clojure.test.check.properties :as prop :include-macros true] [clojure.test.check.clojure-test :refer [defspec]])) (def languages-set #{"clojure" "haskell" "erlang" "scala" "python"}) (spec/def ::jvm-languages (spec/and string? languages-set)) ;;Generative test case for jvm-languages spec: (defspec jvm-languages-positive-generative-test 5 (prop/for-all [language (gen/elements ["clojure" "haskell" "erlang" "scala" "python"])] (println "Testing for language:" language) (spec/valid? ::jvm-languages language))) (defspec jvm-languages-negative-generative-test 100 (prop/for-all [language (gen/such-that #(not (contains? languages-set %)) (gen/one-of [ gen/string (gen/elements ["" nil]) gen/int gen/keyword gen/char-alphanumeric gen/double ]))] (println "Testing for language:" language) (not (spec/valid? ::jvm-languages language)))) (run-tests) Output: #'spec.gen-test.explore/jvm-languages-positive-generative-test Testing for language: scala Testing for language: haskell Testing for language: erlang Testing for language: erlang Testing for language: scala {:result true, :num-tests 5, :seed 1533232724897, :test-var "jvm-languages-generative-test"}