Fork me on GitHub
#clojure-russia
<
2019-02-14
>
rmuslimov02:02:20

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

serioga19:02:39

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

kuzmin_m21:02:25

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

serioga11:02:55

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

kuzmin_m11:02:41

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

serioga11:02:44

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

kuzmin_m11:02:46

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

kuzmin_m11:02:54

еще раз 😃

kuzmin_m11:02:57

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

kuzmin_m11:02:03

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

kuzmin_m11:02:21

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

kuzmin_m11:02:42

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

serioga11:02:44

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

kuzmin_m11:02:08

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

kuzmin_m11:02:14

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

serioga11:02:30

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

kuzmin_m11:02:31

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

kuzmin_m11:02:55

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

kuzmin_m11:02:05

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

kuzmin_m11:02:10

пока просто

kuzmin_m11:02:27

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

kuzmin_m11:02:56

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

kuzmin_m11:02:05

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

serioga11:02:24

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

kuzmin_m11:02:48

ты не понял =(

kuzmin_m11:02:07

вот смотри

kuzmin_m11:02:15

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

kuzmin_m11:02:23

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

serioga11:02:34

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

kuzmin_m11:02:37

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

kuzmin_m11:02:09

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

kuzmin_m11:02:25

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

kuzmin_m11:02:39

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

kuzmin_m11:02:20

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

serioga11:02:48

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

kuzmin_m11:02:26

смотри

kuzmin_m11:02:33

есть ns-hook

serioga11:02:37

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

kuzmin_m11:02:45

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

kuzmin_m11:02:00

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

kuzmin_m11:02:43

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

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

serioga11:02:22

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

kuzmin_m11:02:07

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

serioga11:02:22

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

serioga11:02:48

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

serioga11:02:09

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

kuzmin_m11:02:14

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

kuzmin_m11:02:22

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

serioga11:02:36

после 19 CET

serioga11:02:07

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

serioga11:02:00

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

kuzmin_m12:02:08

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

serioga18:02:34

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

serioga12:02:53

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

serioga12:02:06

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

kuzmin_m13:02:12

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

kuzmin_m20:02:28

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

serioga20:02:31

из репла не пробовал :thinking_face:

kuzmin_m14:02:19

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

serioga17:02:05

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

serioga19:02:26

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

serioga19:02:25

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

serioga19:02:20

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