Как утверждать в Генеративном Тестировании?
Я новичок в тестировании. Я разработал модуль, который принимает около 14 переменных и вывод True/False
, Для тестирования я использовал случайно сгенерированные тесты с использованием Quickcheck.
Однако 14 переменных генерируются случайным образом (так как количество тестовых случаев было огромным для написания вручную), я понятия не имею о значении истинности, так как я могу утверждать и проверять результат моего модуля.
Это инженерный вопрос: как люди утверждают, когда пишут генеративные тестовые примеры?
2 ответа
Насколько я знаю - утверждения в генеративном тестировании делаются с использованием валидаторов. Валидаторы имеют доступ к генератору, коду и вашим выходным значениям. Очень простой валидатор для утверждения предоставлен в этом постэповерном потоке. Что такое инфраструктура генеративного модульного тестирования?
Вы не упомянули, какой язык программирования вы используете. Это полезно? 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)