@oop_ru

Страница 64 из 785
Aleh
15.01.2017
12:11:57
почему бы не назвать эти тесты на репозиторий юнит тестами? Их поломка точно нам скажет, где проблема

Sergey
15.01.2017
12:12:32
юнит то и есть одна единица. а "юнит тест на репозиторий", это взаимодействие 2х обьектов, твоего класса и базы. а это уже нифига не единица

Sergey
15.01.2017
12:12:44
а что такое юнит?
юнит - кусочек изолированный от внешнего мира. Юнит тесты - тесты которые гоняются в рамках процесса, то есть не лазают из пространства процесса во "внешний мир", не лазают в базу, не учитываю время системы, не учитывают базу данных, не говорят по сети

полная изоляция от внешнего мира

Google
Sergey
15.01.2017
12:13:06
если нужен внешний мир - да здравствуют интеграционные тесты

Sergey
15.01.2017
12:13:11
именно

Aleh
15.01.2017
12:13:22
потому что можно сказать, что обычно это тест одного класса

Sergey
15.01.2017
12:13:25
я бы к каждому из этих слов добавил "обычно"
это скорее правило, чем рекомендация

Aleh
15.01.2017
12:13:27
но это необязательно так

Sergey
15.01.2017
12:13:30
я бы к каждому из этих слов добавил "обычно"
для упрощения юнит тесты часто называют просто быстрыми)

Sergey
15.01.2017
12:13:49
вот у тебя 10к юнит тестов

и какой-то вася додумался заюзать базу у себя в юнит тесте

и вместо 5 секунд для прогонки всех тестов, они начинают по минуте выполняться

Aleh
15.01.2017
12:14:25
вопрос в том, у меня есть единый неделимый юнит репозиторий, за которым и база прячется в том числе, они не имеют смысла один без другого, так почему когда я тестирую этот юнит мне надо его бить?) Чисто философия

Sergey
15.01.2017
12:14:44
с точки зрения бизнес логики "репозиторий" это только интерфейс. А реализация это уже инфраструктура. Причем реализация репозитория для SQL будет явно зависеть от SQL

Google
Aleh
15.01.2017
12:15:19
да

Sergey
15.01.2017
12:15:21
и тебе тут явно нужен интеграционный тест что бы проверить как оно "работает вместе"

юнит тест не зависит ни от чего

с базой не так интересно

тут Серега уже сказал про время тестов

Sergey
15.01.2017
12:15:50
твой репозиторий существует не просто так. он лежит поверх pdo, dbal, orm, которые тестировали уже за тебя

Sergey
15.01.2017
12:15:55
другой менее очевидный критерий

вот есть у тебя функция которая зависит от времени

и время берется текущее системное

это уже ломает изоляцию

твой репозиторий существует не просто так. он лежит поверх pdo, dbal, orm, которые тестировали уже за тебя
именно. по этому ты покрываешь только твой код, как твой код взаимодействует с базой данных. Ты не проверяешь корректность работы pdo/dbal

Aleh
15.01.2017
12:16:52
твой репозиторий существует не просто так. он лежит поверх pdo, dbal, orm, которые тестировали уже за тебя
привязка к языковым конструкциям и взаимодействию с ОС мы почему-то откидываем

Sergey
15.01.2017
12:16:59
ты проверяешь только твой интерфейс

что объект репозитория соблюдает контракт

Aleh
15.01.2017
12:17:57
выделение памяти на создаваемые объекты и все такое

Sergey
15.01.2017
12:18:21
аа... ну это опять же черный ящик для нас)

у тебя есть функции/объекты предоставляющие некий интерфейс

и нам "типа" гарантировали что штуки с этим интерфейсом будут работать

Google
Sergey
15.01.2017
12:18:56
и тестировать их нам не нужно

ну и в целом то что ты описал изолировано в пределах области памяти процесса

и не вылазает за него

а от того - норм определение юнит теста)

юнит тесты - изолированные от внешнего мира тесты

это то как я это понимаю

Aleh
15.01.2017
12:20:31
у тебя юнит это что-то чистое

чистая функция

Sergey
15.01.2017
12:20:41
нууу.... не совсем....

Aleh
15.01.2017
12:20:54
хотя

состояние есть

Sergey
15.01.2017
12:20:59
если юнит должен вызывать побочные эффекты - ты затыкаешь точки взаимодействия с внешним миром стабами и моками

Aleh
15.01.2017
12:21:01
внутреннее

Sergey
15.01.2017
12:21:14
представь себе черный ящик у которого есть дырки

и ты просто в юнит тестах в эти дырки вставляешь заглушки

и через них проверяешь эффекты

Aleh
15.01.2017
12:21:35
Sergey
15.01.2017
12:21:46
ну тип того)

Aleh
15.01.2017
12:22:14
или наоборот, из-за состояния в моках\стабах делаем чуть грязнее

Sergey
15.01.2017
12:22:18
контролируемые побочные эффекты типа...

Google
Aleh
15.01.2017
12:23:14
чет мы ушли от изначального вопроса

Sergey
15.01.2017
12:23:33
что есть правильно?)

Sergey
15.01.2017
12:24:23
@guga4ka набросил и свалил))

Sergey
15.01.2017
12:24:27
аналогично) ретроспективы всякие проводим командой

guga
15.01.2017
12:24:29
Не-не

я все читаю

Sergey
15.01.2017
12:24:46
я думал ты пришел пхпшников потроллить)

guga
15.01.2017
12:25:01
просто за пару лет что пишу код за деньги, только в 1 проект смог протащить тесты

Sergey
15.01.2017
12:25:14
ну я например тупо не спрашиваю)

Admin
ERROR: S client not available

Sergey
15.01.2017
12:25:18
омг, как вы без тестов на компилируемом языке то работаете?

Aleh
15.01.2017
12:25:18
а в других фаервол пакеты заблокировал при скачке?)

как там в жаве ant make me happy?

guga
15.01.2017
12:25:46
омг, как вы без тестов на компилируемом языке то работаете?
я тебе больше скажу, я тратил по часу-два в день на ручное протыкивание функционала, который уже был

Sergey
15.01.2017
12:25:52
ну то есть.... я правильно понимаю что когда тебя просят дать оценку на задачу ты такой..., "ну это займет 16 часов но с тестами 20"

guga
15.01.2017
12:25:54
и по пару дней сидел с дебагером в руках

Sergey
15.01.2017
12:25:56
и тебе такие "не нафиг тесты"

или это было что-то в духе "товарисч менеджер, а тесты писать можно?"

Google
guga
15.01.2017
12:26:45
а в остальных "так заведено", ничего не трогай

Sergey
15.01.2017
12:26:50
меня на котлине немного подзаебало перезапускать каждый раз приложение, ждать запуска спринга и тд. с тестами все на много быстрее разрабатывать же

Sergey
15.01.2017
12:27:41
а на пхп хрена, накидал код, зашел в браузер тыкнул ф5 и уже все работает)

Aleh
15.01.2017
12:28:00
фуу, мы не такие, мы в постман заходим)

guga
15.01.2017
12:28:22
а код писать можно?
У себя я бы мог написать их, но даже в дев их пропихнуть уже бы не вышло, потому что пришлось бы менять билд скрипт, тащить либы и прочее

Sergey
15.01.2017
12:28:23
фуу, мы не такие, мы в постман заходим)
ну я образно) я чаще из cli работаю

guga
15.01.2017
12:28:50
httpie

Же

Aleh
15.01.2017
12:29:00
окай(

Sergey
15.01.2017
12:29:04
curl'ом?
не. у меня демоны, крон скрипты и прочий ужас

Sergey
15.01.2017
12:32:52
я часто в последнее время делаю так: пишу набросок кода, делаю тест в котором только передаю входящие параметры, вызываю его и смотрю че мне вернул метод и по тому что вернуло делаю ключевые ассерты. потом рефакторинг

guga
15.01.2017
12:33:21
так а это сложно?
Нет, работы на 3-4 часа, но никто не захотел.

Sergey
15.01.2017
12:33:25
httpie
недавно все же перешел на postman

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

Aleh
15.01.2017
12:33:39
мне просто кажется, там же что-то уровня packagemanager install --dev junit; echo "junit ." >> build.sh

Sergey
15.01.2017
12:33:53
но в целом я сейчас активно смотрю в сторону graphql и там ни то ни то не удобно

Sergey
15.01.2017
12:34:54
мне просто кажется, там же что-то уровня packagemanager install --dev junit; echo "junit ." >> build.sh
dependencies { ... testCompile "org.springframework.boot:spring-boot-starter-test:$springBootVersion" testCompile "org.mockito:mockito-core:2.4.1" testCompile "com.nhaarman:mockito-kotlin:1.0.1" }

Страница 64 из 785