@kuzmin_m ты тут вопрос задавал про тесты, его в истории уже не видно я делаю как-то так:
(defn wrap-with-state [run]
(mount/start)
(run)
(mount/stop))
(use-fixtures :once wrap-with-state)
если я правильно понял вопрос
Ты не так понял вопрос. Я хочу одинаковый набор тестов с разными фикстурами в разных неймспейсах. Сейчас я вроде как нащупал более-менее приличный вариант.
@kuzmin_m test-ns-hook
не позволяет явно перечислить тесты из других неймспейсов?
(defn test-ns-hook []
(common/test-rpc-server-id)
(common/test-call-command)
(common/test-broadcast))
я именно так не делал, но думается что должно работать
Оно с фикстурами не работает
а зачем ему работать с фикстурами? вызываешь фикстуры до и после тестов, они же здесь последовательно работают
@kuzmin_m т.е. вот так
(defn test-ns-hook []
(init)
(common/test-rpc-server-id)
(common/test-call-command)
(common/test-broadcast)
(shutdown))
Каждый тест нужно обернуть в фикстуру
И фикстура разная для каждого неймспейса
так в моём примере (init)
разный для каждого
Условно Есть протокол Есть тесты на протокол Есть 2 реализации Нужно эти тесты применить к реализациям
Нужно каждый тест оборачивать, а не группу
ну хорошо, каждый
но это же не проблема в test-ns-hook
?
то есть я пока вижу вопрос о передаче конкретной реализации в тесты
можно ли тест вернуть из функции, которой передали реализацию
Это через динамические переменные
Нет
Тест это var с метаданными
то есть test-ns-hook
тебе тоже не подходит?
примерного кода нет на «поиграть»? или вопрос не актуален уже?
test-ns-hook не применяет фикстуры
это написано в документации
в общем, я на функциях и t/testing пробую это сделать
> test-ns-hook не применяет фикстуры но ты то их можешь применить вручную или нет?
смотри
есть протокол
(ns publicator.domain.abstractions.id-generator)
(defprotocol IdGenerator
(-generate [this space]))
(declare ^:dynamic *id-generator*)
(defn generate [space]
(-generate *id-generator* space))
его реализация задается через динамическую переменную
и есть набор тестов для этого протокола:
(ns publicator.domain.abstractions.id-generator-testing
(:require
[publicator.domain.abstractions.id-generator :as sut]
[clojure.test :as t]))
(defn- return-value []
(t/is (pos-int? (sut/generate :test-space))))
(defn tests [wrapper]
(doseq [test [#'return-value]
:let [test-name (-> test symbol name)
test (wrapper test)]]
(t/testing test-name
(test))))
тут только один “тест” - return-value
но может быть и много, для других протоколов
а сам тест выглядит вот так:
(ns publicator.domain.abstractions.id-generator-fake-test
(:require
[publicator.domain.abstractions.id-generator-fake :as sut]
[publicator.domain.abstractions.id-generator-testing :as testing]
[clojure.test :as t]))
(t/deftest id-generator
(testing/tests (fn [t]
(fn []
(with-bindings (sut/binding-map)
(t))))))
@serioga понятнее стало?
т.е. это вроде как рабочее решение но может быть кто-то что-то другое придумал т.е. мне нужны обычные shared tests
а фикстурами здесь что выступает?
их тут нет
но их функция есть
(fn [t]
(fn []
(with-bindings (sut/binding-map)
(t)))))
т.е. я к тому, что clojure.test довольно убог его 10 лет назад написали и почти не трогали
не вижу откуда взялось sut/binding-map
я не давал этот листинг
> т.е. я к тому, что clojure.test довольно убог ну это известно kaocha
(ns publicator.domain.abstractions.id-generator-fake
(:require
[publicator.domain.abstractions.id-generator :as id-generator]))
(deftype IdGenerator [ids]
id-generator/IdGenerator
(-generate [_ space]
(-> ids
(swap! update space (fnil inc 0))
(get space))))
(defn build []
(IdGenerator. (atom {})))
(defn binding-map []
{#'id-generator/*id-generator* (build)})
а kaocha чем поможет?
один фиг тесты объявляются через clojure.test
> а kaocha чем поможет? не знаю хвалят
может быть я еще на midje посмотрю
но он больно много зависимостей тянет
и с cider нет интеграции хотя вот нашел - https://github.com/nubank/midje-nrepl
но мне, по идее, не нужен синтаксис midje мне нужна возможность гибко объявлять тесты а не делать “красивые” метчеры
> понятнее стало? потрогаю на досуге, чтобы почуствовать проблему не умозрительно
если что получится альтернативное, отпишу
зачем ты тогда снипетами меня забрасывал 🙂