如何在生成测试中断言?

时间:2015-05-19 06:56:11

标签: unit-testing generative-testing

我是测试新手。我开发了一个模块,它需要大约14个变量并输出True/False。为了测试,我使用'Quickcheck'来使用随机生成的测试用例。

然而,14个变量是随机生成的(因为手动编写的测试用例数量很大),我不知道真值,所以我怎么能断言 - 验证模块的结果。

这是一个工程问题:人们在编写生成测试用例时如何断言?

2 个答案:

答案 0 :(得分:0)

据我所知 - 生成测试中的断言是使用验证器完成的。验证器可以访问生成器,代码和输出值。在此堆栈溢出后What is a Generative Unit Test Framework?

上提供了一个非常简单的断言验证器

答案 1 :(得分:0)

您没有提到您使用的是哪种编程语言。 这有帮助吗? 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)