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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow