
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
если нужен внешний мир - да здравствуют интеграционные тесты

Aleh
15.01.2017
12:13:10

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
другой менее очевидный критерий
вот есть у тебя функция которая зависит от времени
и время берется текущее системное
это уже ломает изоляцию

Aleh
15.01.2017
12:16:52

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

Aleh
15.01.2017
12:17:36

Sergey
15.01.2017
12:17:46

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
что есть правильно?)

Aleh
15.01.2017
12:24:06

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
и тебе такие "не нафиг тесты"
или это было что-то в духе "товарисч менеджер, а тесты писать можно?"

guga
15.01.2017
12:26:33

Google

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

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

Aleh
15.01.2017
12:26:57

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

Aleh
15.01.2017
12:28:44

guga
15.01.2017
12:28:50
httpie
Же

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

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

Aleh
15.01.2017
12:29:11
а
хе

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

guga
15.01.2017
12:33:21

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