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