Лучший способ - использовать плагин lein test-refre sh .
. Он будет контролировать файловую систему и перезапускать ваши юнит-тесты при каждом сохранении файла. Просто выполните модульный тест, который вызывает (myproj.core/-main)
или аналогичный, и при каждом сохранении файла ваша программа будет перезапускаться.
Еще лучший способ - написать модульный тест, который запускает одну или несколько функций (возможно, включая -main
) и сравнивает фактический результат с ожидаемым.
Не забудьте посмотреть метаданные :test-refresh/focus
, которые позволят вам выбрать определенные c тесты для запуска, временно игнорируя другие.
Я широко использую обе функции в моей библиотеке Tupelo Clojure , которая имеет более 3500 модульных тестов. В качестве примера см. проект Clojure Template :
~/demo > git clone git@github.com:io-tupelo/clj-template.git
Cloning into 'clj-template'...
~/demo >
~/demo > cd clj-template
~/demo/clj-template > lein test
lein test _bootstrap
-------------------------------
Clojure 1.10.1 Java 13
-------------------------------
lein test tst.demo.core
Ran 3 tests containing 8 assertions.
0 failures, 0 errors.
~/demo/clj-template >
и код:
(ns tst.demo.core
(:use demo.core tupelo.core tupelo.test)
(:require
[tupelo.string :as ts])
(:import [demo Calc]))
(dotest
(is= 5 (+ 2 3))
(isnt= 9 (+ 2 3))
(throws? (/ 1 0)) ; verify that an illegal operation throws an exception
(is= 3 (add2 1 2))
(throws? (add2 1 "two"))) ; Prismatic Schema will throw since "two" is not a number
Если вы используете tupelo.test
, как указано выше, вы можно просто заменить (dotest-focus ...)
вместо dotest
и только , которые будут выполняться конкретными тестами.
Другой пример - JUXT / bidi демо .
Наслаждайтесь!
Обновление
Если вы хотите исследовать альтернативного бегуна Leiningen, ознакомьтесь с Koacha lib .