Вы можете использовать with-test
- для определения функции и модульного теста одновременно
; with-test is the same as using {:test #((is...)(is...))} in the meta data of the function.
(:use 'clojure.test)
(with-test
(defn my-function [x y]
(+ x y))
(is (= 4 (my-function 2 2)))
(is (= 7 (my-function 3 4))))
(test #'my-function) ;(test (var my-function))
=> :ok
ПРИМЕЧАНИЕ. При использовании with-test
функция все равно должна быть определенав качестве глобальной переменной, используя defn
(см. пример).Анонимный fn
в качестве значения ключа карты не будет найден механизмом тестирования.
Что нужно сделать, это определить функцию как автономную переменную, а затем включить ссылку на нее на карте:
{:battlecry my-function} ; for example
Сказав это, большинство людей (включая меня) предпочитают иметь отдельное пространство имен тестирования, чтобы тесты не загромождали исходный код.Мне нравится организовывать их как:
flintstones.core ; main namespace
tst.flintstones.core ; the unit test namespace
Затем они помещаются в подкаталоги ./src
и ./test
каталога dir проекта:
src/flintstones/core.clj ; main namespace
test/tst/flintstones/core.clj ; the unit tests
Но есть и другие возможности.См. Также обсуждение кулинарной книги Clojure по тестированию .