clojure-russia 2019-02-14

Чат, привет. А дайте пожта ценный совет что почитать чтобы научиться Java 8, я умею python/clojure теперь вот надо научиться Java на хорошем уровне. Спасибо!

@kuzmin_m Ну как-то не встретилось трудностей https://github.com/serioga/test-protocol-testing

@kuzmin_m я попробовал вчера сделать PR, мне прав не хватило

13:20	Can't Create Pull Request
					Push failed:
					remote: Permission to darkleaf/protocol-testing.git denied to serioga.
					unable to access '': The requested URL returned error: 403

форкни или патч пришли

спасибо, завтра посмотрю как тесты в repl запускаются

из репла не пробовал 🤔

значит просто перечисляешь нужные тесты в каждой реализации, если набор тестов разный

набор тестов одинаковый

и вообще, смотря что за тест он же может и не использовать реализацию

разный контекст

еще раз 😃

есть протокол

есть 2 реализации

я хочу наложить на реализации некоторые ограничения

которые нельзя выразить clojure.spec например

> я хочу наложить на реализации некоторые ограничения про это ничего не было сказано

т.е. скажем, у меня есть протокол для генерации идентификаторов

и там один метод

я сделал в рамках того, что обсуждалось

я хочу, чтобы все его реализации возвращали pos-in?

и принимали как параметр пространство в котором нужно генерировать id

и это пространство - keyword

пока просто

а теперь у меня есть более сложный протокол

и я хочу проверить, что реализация правильно работает в многопоточном окружении

и это уже именно проверки кодом

> и принимали как параметр пространство в котором нужно генерировать id заведи ещё одну динамическую переменную, для пространства генерации айди

ты не понял =(

вот смотри

у тебя есть вилка и розетка

электрические

я понял, что у тебя постоянно усложняются условия задачи

есть их “протокол” - стандарт

и я хочу проверять реализует ли этот стандарт реализацию

выдерживает ли розетка ток, указанный в стандарте

выдерживает ли она удары молотком

и т.п.

@serioga тесты решают эту задачу? или я неправильный инструмент выбрал?

я вижу, что вариант с ns-hook позволяет как угодно перековырять поведение тестов и надстроить сверху всё-что угодно. то есть проблему написать любую сложную машинерию не вижу

смотри

есть ns-hook

программные тесты не решают задачу ударов молотком

в нем вызываются несколько тестов

и каждый этот тест нужно завернуть в фикстуру

или ты предлагаешь как-то так:

(defn test-suite  []
 (*wrapper* test-bar)
 (*wrapper* test-baz))

я предлагаю написать так, как требует задача но я вижу, что твою задачу я до конца не знаю test-suite нужен только для того, чтобы было идентичное тестирование для обоих реализаций если тестирование не идентичное, то у каждой реализации в ns-hook пишется что-то своё, с использованием тестов из протокольной части

давай так, у тебя есть время/желание продолжать?

то есть я просто проверил способ переиспользования тестов реализациями, не более того

> давай так, у тебя есть время/желание продолжать? ну, только если ты по прежнему видешь какую-то неразрешимую проблему, которую ты хотел бы решить ну и не сейчас, конечно, а вечером или на выходных

можно даже голосом

вопрос остался - да попробую сделать маленький пример чтобы было с чем работать

вечер - это во сколько?

после 19 CET

примерно как в предыдущии дни было

> попробую сделать маленький пример давай проект на гитхабе, желательно lein based

https://github.com/darkleaf/protocol-testing сам протокол, обвязка, тесты еще будут рефакториться, это не предмет вопроса. вопрос в том, как убрать дублирование в тестах + https://github.com/darkleaf/protocol-testing/blob/master/test/protocol_testing/storage_fake_test.clj + https://github.com/darkleaf/protocol-testing/blob/master/test/protocol_testing/storage_impl_test.clj

тебе как, патч дать или pull request?

cider что-то не захотел работать с test-ns-hook, Пришлось его заменить на deftest и вызывать в нем test-suit. Спасибо за помощь. Но все равно все криво выклядит. Хочется удобства, поддержки в ide, хотя о чем я) Или просто тесты продублирую или возьму за основу твой вариант.

звать тесты из тестов, тоже интересная идея 🙂

(defn test-suite
  []
  (test-bar)
  (test-baz))
реализацию нужно на кадый тест новую заводить в этом проблема

один протокол, две реализации, тестируются единым набором тестов

из некрасивого только упоминание холостого тестирования неймспейса с набором тестов

самая сложная часть была в ооп, которым я практически не пользуюсь