clojure
clojure.test
Поиск…
является
is
макрос является ядром clojure.test
библиотеки. Он возвращает значение выражения своего тела, печатая сообщение об ошибке, если выражение возвращает значение false.
(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
Группировка связанных тестов с помощью макроса тестирования
Вы можете группировать связанные утверждения в deftest
модульных тестах в контексте с помощью макроса 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)))))
Это поможет прояснить результат теста при запуске. Обратите внимание, что testing
должно происходить внутри самого deftest
.
Определение теста с наихудшим
deftest
- это макрос для определения модульного теста, аналогичный модульным испытаниям на других языках.
Вы можете создать тест следующим образом:
(deftest add-nums
(is (= 2 (+ 1 1)))
(is (= 3 (+ 1 2))))
Здесь мы определяем тест с именем add-nums
, который проверяет функцию +
. Тест имеет два утверждения.
Затем вы можете запустить такой тест в текущем пространстве имен:
(run-tests)
Или вы можете просто запустить тесты для пространства имен, в котором находится тест:
(run-tests 'your-ns)
являются
are
макросъемки также часть clojure.test
библиотеки. Это позволяет делать несколько утверждений против шаблона.
Например:
(are [x y] (= x y)
4 (+ 2 2)
8 (* 2 4))
=> true
Здесь (= xy)
действует как шаблон, который принимает каждый аргумент и создает из is
утверждение.
Это расширяет неоднократное is
утверждение:
(do
(is (= 4 (+ 2 2)))
(is (= 8 (* 2 4))))
Оберните каждый тест или все тесты с помощью приспособлений
use-fixtures
позволяет обертывать каждый deftest
в пространстве имен кодом, который выполняется до и после теста. Его можно использовать для крепления или шлейфа.
Светильники - это просто функции, которые выполняют тестовую функцию и запускают ее с помощью других необходимых действий (до / после, обертка).
(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)
При использовании с :once
он завершает весь цикл тестов в текущем пространстве имен с помощью функции
(defn database-for-tests [all-tests]
(setup-database)
(all-tests)
(drop-database))
(use-fixtures :once database-for-tests)
Запуск тестов с Leiningen
Если вы используете Leiningen, и ваши тесты находятся в тестовом каталоге в корне вашего проекта, вы можете запускать свои тесты с lein test