clojure
clojure.test
Sök…
är
Det is
makrot är kärnan i clojure.test
biblioteket. Det returnerar värdet på dess kroppsuttryck, skriver ut ett felmeddelande om uttrycket returnerar ett falsey-värde.
(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
Gruppera relaterade test med testmakro
Du kan gruppera relaterade påståenden i deftest
enhetstester i ett sammanhang med hjälp av 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)))))
Detta hjälper till att klargöra testutgången när den körs. Observera att testing
måste ske inom en deftest
.
Definiera ett test med djuptest
deftest
är ett makro för att definiera ett enhetstest, liknande enhetstester på andra språk.
Du kan skapa ett test enligt följande:
(deftest add-nums
(is (= 2 (+ 1 1)))
(is (= 3 (+ 1 2))))
Här definierar vi ett test som heter add-nums
, som testar +
-funktionen. Testet har två påståenden.
Du kan sedan köra testet så här i ditt nuvarande namnområde:
(run-tests)
Eller så kan du bara köra testerna för det namnutrymme som testet är i:
(run-tests 'your-ns)
är
Det are
makro är också en del av clojure.test
biblioteket. Det låter dig göra flera påståenden mot en mall.
Till exempel:
(are [x y] (= x y)
4 (+ 2 2)
8 (* 2 4))
=> true
Här fungerar (= xy)
som en mall som tar varje argument och skapar en is
påstående ur den.
Detta expanderar till flera is
påståenden:
(do
(is (= 4 (+ 2 2)))
(is (= 8 (* 2 4))))
Packa in varje test eller alla tester med användning av fixturer
use-fixtures
gör det möjligt att deftest
in alla deftest
i namnutrymmet med kod som körs före och efter testet. Det kan användas för fixturer eller stubbning.
Fixturer är bara funktioner som tar testfunktionen och kör den med andra nödvändiga steg (före / efter, lindning).
(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)
När den används med :once
slår den in hela testet i det aktuella namnområdet med funktion
(defn database-for-tests [all-tests]
(setup-database)
(all-tests)
(drop-database))
(use-fixtures :once database-for-tests)
Löparester med Leiningen
Om du använder Leiningen och dina tester finns i testkatalogen i din projektrot kan du köra dina test med lein test