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



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow