clojure
clojure.test
Szukaj…
jest
is
makro jest rdzeń clojure.test
bibliotece. Zwraca wartość wyrażenia ciała, wypisując komunikat o błędzie, jeśli wyrażenie zwraca wartość falsey.
(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
Grupowanie powiązanych testów za pomocą makra testującego
Możesz grupować powiązane twierdzenia w deftest
testach jednostkowych w kontekście za pomocą makra testing
:
(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)))))
Pomoże to wyjaśnić wyniki testu po uruchomieniu. Pamiętaj, że testing
musi odbywać się w trakcie deftest
.
Zdefiniowanie testu ze zręcznością
deftest
to makro do definiowania testu jednostkowego, podobnie jak testy jednostkowe w innych językach.
Możesz utworzyć test w następujący sposób:
(deftest add-nums
(is (= 2 (+ 1 1)))
(is (= 3 (+ 1 2))))
Tutaj definiujemy test o nazwie add-nums
, który testuje funkcję +
. Test ma dwa stwierdzenia.
Następnie możesz uruchomić test w ten sposób w bieżącej przestrzeni nazw:
(run-tests)
Lub możesz po prostu uruchomić testy dla przestrzeni nazw, w której znajduje się test:
(run-tests 'your-ns)
są
Makro are
jest również częścią biblioteki clojure.test
. Pozwala na tworzenie wielu twierdzeń na podstawie szablonu.
Na przykład:
(are [x y] (= x y)
4 (+ 2 2)
8 (* 2 4))
=> true
Tutaj (= xy)
działa jako szablon który zabierze każdy argument i tworzy is
twierdzenie z niego.
Rozszerza do wielu is
twierdzenia:
(do
(is (= 4 (+ 2 2)))
(is (= 8 (* 2 4))))
Zawiń każdy test lub wszystkie testy za pomocą urządzeń użytkowych
use-fixtures
pozwala zawijać każdy deftest
w przestrzeni nazw kodem, który działa przed i po teście. Może być stosowany do opraw lub stubowania.
Urządzenia to tylko funkcje, które biorą funkcję testową i uruchamiają ją z innymi niezbędnymi krokami (przed / po, zawijanie).
(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)
W przypadku użycia z :once
, zawija całą serię testów w bieżącej przestrzeni nazw z funkcją
(defn database-for-tests [all-tests]
(setup-database)
(all-tests)
(drop-database))
(use-fixtures :once database-for-tests)
Uruchamianie testów z Leiningen
Jeśli używasz Leiningen, a twoje testy znajdują się w katalogu testowym w katalogu głównym projektu, możesz uruchomić testy przy użyciu lein test