我是测试新手。我开发了一个模块,它需要大约 14 个变量和输出True/False
。对于测试,我使用了“Quickcheck”随机生成的测试用例。
但是 14 个变量是随机生成的(因为手动编写的测试用例数量很大),我不知道真值,所以我怎么能断言验证我的模块的结果。
这是一个工程问题:人们在编写生成测试用例时如何断言?
我是测试新手。我开发了一个模块,它需要大约 14 个变量和输出True/False
。对于测试,我使用了“Quickcheck”随机生成的测试用例。
但是 14 个变量是随机生成的(因为手动编写的测试用例数量很大),我不知道真值,所以我怎么能断言验证我的模块的结果。
这是一个工程问题:人们在编写生成测试用例时如何断言?
据我所知 - 生成测试中的断言是使用验证器完成的。验证者可以访问生成器、代码和您的输出值。这个stackoverflow帖子提供了一个非常简单的断言验证器 -什么是生成单元测试框架?
您没有提到您使用的是哪种编程语言。这有帮助吗?defspec 在内部使用 Quickcheck
(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)