Size: a a a

Clojure — русскоговорящее сообщество

2019 December 09

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
А кто-нибудь test.check использует?
Я не понимю в чем его полезность и какой класс ошибок он находит.

Толку от того, что я условный sort проверю на 100 массивах, а не на одном?

Или за счет него можно увеличить покрытие и "автоматически" покрывать разные ветки алгоритма?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Полезность в том, что на базе него спека генерит рандомные данные. Например, нафигачить тысячу рандомных пользователей для тестов.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
И нечеткие проверки иногда полезны.
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
А кто-нибудь test.check использует?
Я не понимю в чем его полезность и какой класс ошибок он находит.

Толку от того, что я условный sort проверю на 100 массивах, а не на одном?

Или за счет него можно увеличить покрытие и "автоматически" покрывать разные ветки алгоритма?
на одном ты скорее всего не проверишь все edge-cases
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
но и этот один тебе еще нужно придумать самому
источник

DF

Damir Farazetdinov in Clojure — русскоговорящее сообщество
да. почти бесплатно можешь слегка увеличить покрытие. но часто, если хочешь довести до 100%, то придётся головушку напрячь.
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Тут речь не о spec.
Или о том, что я могу нагенерировать данных.

Вопрос в том, зачем все это.
Можно какой-нибудь пример для edge-cases?

Скажем, если я делаю функцию sort.
И пришу тест - приходит массив интов, выходит отсортированный.
И внутри я выбираю алгоритм сортировки, например от длины вектора или погоды на луне.
В этом случае - понятно, тест покроет все возможные ветки.

Но как правило, нужно самому задать параметры функции, чтобы алгоритм пошел по нужной ветке. При этом нужно по возвращаемому значению понять, какая ветка использовалась.
Например,  есть функция рендеринга. Если передается пустая коллекция, то функция возвращает разметку для сообщения "Сообщений нет".
Если передается заполненная коллекция, то возврящается разметка для сообщений из коллекции.
И как тут написать _один_ тест?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Т.е. мне понятно зачем нужны генераторы, например gen/vector, но не понятно в чем польза от prop/for-all.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
бывает, в алгоритм кто-то впендюрил один if, который все меняет с ног на голову, а тестов нет. Массовый прогон поможет его покрыть или по крайней мере обнаружить
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
а есть более-менее реальный пример того, что проверяют в prop/for-all?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
и если нет тестов, то может быть тут обычный тест справится без test.check? все равно тест присать
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
или в случае с функцией рендеринга, мне нужно проверять,
что сколько сообщений предали, столько и отрендерили?
т.е. тест упадет, если кто-то будет фильтровать или добавлять сообщения в тестируемой функции.
а в чем польза?
источник

SS

Semyon Semyonovich in Clojure — русскоговорящее сообщество
не стоит в спеку переносить проверки на md5 - это выглядит странно, по аналогии проверка пароля и выдача тикета для выноса в спеку
источник

SS

Semyon Semyonovich in Clojure — русскоговорящее сообщество
спека это больше описание граничных условий
источник

M[

Maxim 📱 Dzhafarov [R10] in Clojure — русскоговорящее сообщество
????
Два наиболее популярных подхода к разработке под React Native:
- Expo SDK (проще, но много ограничений, типа неподдержки Bluetooth, список есть в доках)
- Ejected Expo / чистый React Native (больнее, но практически без ограничений)

Во втором случае возможности примерно ничем неограничены (в частности, делали у себя геолокацию в бэкграунде), даже если чего-то не хватает всегда можно написать свой нативный модуль и подключить из JS (так тоже делали для кастомной интеграции с Raspberry Pi). Главная проблема с React Native у нас была в поддержке нативных зависимостей (gradle / cocoapods), но кажется с этим проблемы будут и при нативной разработке. Еще с перфомансом могут быть проблемы, но там уже зависит от конкретной задачи.

Из очевидных преимуществ: можно использовать любимые re-frame / fulcro и подключаться к процессу через REPL. Насколько знаю, в shadow-cljs сейчас хорошая поддержка React Native, Томас Хеллер специально выделил на него много времени летом.
привет, ты в курсе как настроить RN проект?
источник

?

???? in Clojure — русскоговорящее сообщество
Maxim 📱 Dzhafarov [R10]
привет, ты в курсе как настроить RN проект?
источник

M[

Maxim 📱 Dzhafarov [R10] in Clojure — русскоговорящее сообщество
ty
источник

M[

Maxim 📱 Dzhafarov [R10] in Clojure — русскоговорящее сообщество
fuck, там экспо, гг
источник

ML

Mikhail Levchenko in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
или в случае с функцией рендеринга, мне нужно проверять,
что сколько сообщений предали, столько и отрендерили?
т.е. тест упадет, если кто-то будет фильтровать или добавлять сообщения в тестируемой функции.
а в чем польза?
гугли property based testing
источник

ML

Mikhail Levchenko in Clojure — русскоговорящее сообщество
и найдёшь кучу материалов о том, зачем, почему и как
источник