clojure
clojure.test
Zoeken…
is
De is
macro is de kern van de bibliotheek clojure.test
. Het retourneert de waarde van zijn lichaamsexpressie en drukt een foutmelding af als de expressie een valse waarde retourneert.
(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
Groepeer gerelateerde testen met de testmacro
U kunt bij elkaar horende beweringen in deftest
unit tests binnen een context met behulp van de testing
macro:
(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)))))
Dit helpt de testoutput te verduidelijken wanneer deze wordt uitgevoerd. Merk op dat het testing
binnen een deftest
moet gebeuren.
Een test definiëren met behendigheid
deftest
is een macro voor het definiëren van een eenheidstest, vergelijkbaar met eenheidstests in andere talen.
U kunt als volgt een test maken:
(deftest add-nums
(is (= 2 (+ 1 1)))
(is (= 3 (+ 1 2))))
Hier definiëren we een test genaamd add-nums
, die de +
-functie test. De test heeft twee beweringen.
U kunt de test vervolgens als volgt uitvoeren in uw huidige naamruimte:
(run-tests)
Of u kunt gewoon de tests uitvoeren voor de naamruimte waarin de test zich bevindt:
(run-tests 'your-ns)
zijn
De are
macro is ook onderdeel van de clojure.test
bibliotheek. Hiermee kunt u meerdere beweringen doen tegen een sjabloon.
Bijvoorbeeld:
(are [x y] (= x y)
4 (+ 2 2)
8 (* 2 4))
=> true
Hier, (= xy)
fungeert als een matrijs waarvan de argumenten draait en creëert een is
bevestiging van.
Dit vergroot om meerdere is
beweringen:
(do
(is (= 4 (+ 2 2)))
(is (= 8 (* 2 4))))
Verpak elke test of alle tests met gebruik-armaturen
use-fixtures
maakt het mogelijk om elke deftest
in naamruimte te verpakken met code die vóór en na de test wordt uitgevoerd. Het kan worden gebruikt voor armaturen of stubbing.
Armaturen zijn slechts functies die de testfunctie uitvoeren en deze uitvoeren met andere noodzakelijke stappen (voor / na, 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)
Wanneer gebruikt met :once
, verpakt het hele reeks tests in de huidige naamruimte met functie
(defn database-for-tests [all-tests]
(setup-database)
(all-tests)
(drop-database))
(use-fixtures :once database-for-tests)
Testen uitvoeren met Leiningen
Als u Leiningen gebruikt en uw tests bevinden zich in de testmap in uw project root, dan kunt u uw tests uitvoeren met lein test