clojure
clojure.test
Recherche…
est
Le is
macro est au cœur de la clojure.test
bibliothèque. Il renvoie la valeur de son expression de corps, imprimant un message d'erreur si l'expression renvoie une valeur 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
Regroupement des tests associés avec la macro de test
Vous pouvez regrouper des assertions associées dans des deftest
unitaires de test dans un contexte à l'aide de la macro 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)))))
Cela aidera à clarifier la sortie du test lors de l'exécution. Notez que les testing
doivent avoir lieu à l'intérieur d'un deftest
.
Définir un test avec le deftest
deftest
est une macro pour définir un test unitaire, similaire aux tests unitaires dans d'autres langues.
Vous pouvez créer un test comme suit:
(deftest add-nums
(is (= 2 (+ 1 1)))
(is (= 3 (+ 1 2))))
Nous définissons ici un test appelé add-nums
, qui teste la fonction +
. Le test a deux assertions.
Vous pouvez ensuite exécuter le test comme ceci dans votre espace de noms actuel:
(run-tests)
Ou vous pouvez simplement exécuter les tests pour l'espace de noms dans lequel se trouve le test:
(run-tests 'your-ns)
sont
Le are
macro fait également partie de la clojure.test
bibliothèque. Il vous permet de faire plusieurs assertions sur un modèle.
Par exemple:
(are [x y] (= x y)
4 (+ 2 2)
8 (* 2 4))
=> true
Ici, (= xy)
agit comme un modèle qui prend chaque argument et crée une is
l' affirmation hors de celui - ci.
Cela élargit à de multiples is
affirmations:
(do
(is (= 4 (+ 2 2)))
(is (= 8 (* 2 4))))
Enveloppez chaque test ou tous les tests avec des accessoires d'utilisation
use-fixtures
permet d'emballer chaque deftest
dans l'espace de nommage avec le code qui s'exécute avant et après le test. Il peut être utilisé pour des luminaires ou des bouts.
Les appareils ne sont que des fonctions qui prennent en charge la fonction de test et l’exécutent avec d’autres étapes nécessaires (avant / après, emballage).
(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)
Utilisé avec :once
, il enveloppe une série complète de tests dans l'espace de noms actuel avec la fonction
(defn database-for-tests [all-tests]
(setup-database)
(all-tests)
(drop-database))
(use-fixtures :once database-for-tests)
Exécution de tests avec Leiningen
Si vous utilisez Leiningen et que vos tests se trouvent dans le répertoire de test de la racine de votre projet, vous pouvez exécuter vos tests en utilisant le lein test