clojure
clojure.test
Suche…
ist
Das is Makro ist der Kern der clojure.test Bibliothek. Es gibt den Wert des Rumpfausdrucks zurück und gibt eine Fehlermeldung aus, wenn der Ausdruck einen Falsey-Wert zurückgibt.
(defn square [x]
(+ x x))
(require '[clojure.test :as t])
(t/is (= 0 (square 0)))
;;=> true
(t/is (= 1 (square 1)))
;;
;; FAIL in () (foo.clj:1)
;; expected: (= 1 (square 1))
;; actual: (not (= 1 2))
;;=> false
Zusammengehörige Tests mit dem Testmakro gruppieren
Sie können Gruppen Behauptungen in Zusammenhang deftest Unit - Tests in einem Kontext der Verwendung von testing Makro:
(deftest add-nums
(testing "Positive cases"
(is (= 2 (+ 1 1)))
(is (= 4 (+ 2 2))))
(testing "Negative cases"
(is (= -1 (+ 2 -3)))
(is (= -4 (+ 8 -12)))))
Dies hilft, die Testausgabe beim Ausführen zu klären. Beachten Sie, dass der testing innerhalb eines deftest .
Definieren eines Tests mit Schnellzugriff
deftest ist ein Makro zum Definieren eines deftest , ähnlich dem deftest in anderen Sprachen.
Sie können einen Test wie folgt erstellen:
(deftest add-nums
(is (= 2 (+ 1 1)))
(is (= 3 (+ 1 2))))
Hier definieren wir einen Test namens add-nums , der die Funktion + testet. Der Test hat zwei Aussagen.
Sie können den Test dann wie folgt in Ihrem aktuellen Namespace ausführen:
(run-tests)
Oder Sie können einfach die Tests für den Namespace ausführen, in dem sich der Test befindet:
(run-tests 'your-ns)
sind
Das are Makro ist auch Teil der clojure.test Bibliothek. Sie können mehrere Zusicherungen gegen eine Vorlage vornehmen.
Zum Beispiel:
(are [x y] (= x y)
4 (+ 2 2)
8 (* 2 4))
=> true
Hier (= xy) dient als Schablone , die jedes Argument annimmt und schafft eine is Behauptung aus ihm heraus.
Dies erweitert , um mehrere is Behauptungen:
(do
(is (= 4 (+ 2 2)))
(is (= 8 (* 2 4))))
Umhüllen Sie jeden Test oder alle Tests mit Gebrauchsgeräten
use-fixtures deftest kann jeder deftest in den Namespace mit Code eingeschlossen werden, der vor und nach dem Test ausgeführt wird. Es kann zum Fixieren oder Stubbing verwendet werden.
Fixtures sind nur Funktionen, die die Testfunktion übernehmen und mit anderen erforderlichen Schritten ausführen (Vorher / Nachher, Wrap).
(ns myapp.test
(require [clojure.test :refer :all])
(defn stub-current-thing [body]
;; with-redefs stubs things/current-thing function to return fixed
;; value for duration of each test
(with-redefs [things/current-thing (fn [] {:foo :bar})]
;; run test body
(body)))
(use-fixtures :each stub-current-thing)
Bei Verwendung mit :once wird der gesamte Testlauf mit der Funktion in den aktuellen Namespace eingeschlossen
(defn database-for-tests [all-tests]
(setup-database)
(all-tests)
(drop-database))
(use-fixtures :once database-for-tests)
Laufende Tests mit Leiningen
Wenn Sie Leiningen verwenden und sich Ihre Tests im lein test in Ihrem Projektstammverzeichnis befinden, können Sie Ihre Tests mit lein test