
Mykola
03.05.2018
13:20:36
как и не важен уровень детализации: это можно и про функцию говорить, и про класс, и про либу, и про апликейшн в целом

Igor
03.05.2018
13:21:30

Sergey
03.05.2018
13:21:50
потом поговорим

Google

Igor
03.05.2018
13:22:31
Зачем мне твою видяшка, я тебе про свой опыт говорю.
И фичи пилим быстро без переписывания тестов постоянного.

Mykola
03.05.2018
13:22:32
https://www.destroyallsoftware.com/talks/boundaries

Aleh
03.05.2018
13:22:37

Mykola
03.05.2018
13:22:37
и вот эту видяшку еще
да может и без тестов работать)

Dmitriy
03.05.2018
13:23:06
как вообще возможен рефакторинг без тестов?

Mykola
03.05.2018
13:23:13
и, я вам скажу, иногда намного лучше, чем с тестами

Igor
03.05.2018
13:23:33

Mykola
03.05.2018
13:24:25
случай из жизни: есть код, весь покрытый тестами, но там ад... его просто нельзя порефакторить без того, чтоб просто удалить тесты нахрен все сразу

Igor
03.05.2018
13:24:56

Mykola
03.05.2018
13:24:59

Aleh
03.05.2018
13:25:29
ну точнее, это может быть медленно, если вы в это не уперлись и у вас пока быстрый интеграционный тест, то ок. Разве что нет фидбека по дизайну, но это опять же может быть неважно

Google

Dmitriy
03.05.2018
13:27:45

Aleh
03.05.2018
13:27:57
юнит-тест в этом случае должен только оградить реальный бизнес-модуль от внешнего мира, чтобы прогонять тысячи сценариев за миллисекунды. Если это не требуется, то нет большого смысла время на это тратить
при разработке хочется получать фидбек на изменениях очень быстро
убрал какой-то кусок и хочу понять, сломал я чето или нет как можно быстрее
1. ошибки типов
2. ошибки юнит-тестов
3. ошибки интеграционных тестов
4. ошибки e2e тестов

Dmitriy
03.05.2018
13:29:13
я тоже хочу получить годовую ЗП в начале года, но приходится терпеть
ужас просто)

Aleh
03.05.2018
13:29:30
ну если болит, то уже 40 лет как есть решение это боли, просто юзайте
если не болит, то не надо карго-культом заниматься)

Dmitriy
03.05.2018
13:32:03
просто это есть и все. Как сборка и компиляция проекта на крестах каких-нибудь. Я уверен, что они тоже хотят фидбэк сразу получать. Но жизнь несправедлива)

Mykola
03.05.2018
13:32:53
не обязательно собирать всё, чтоб проверить маленький кусочек

Dmitriy
03.05.2018
13:33:14
вот и ответ)

Aleh
03.05.2018
13:33:46
?

Dmitriy
03.05.2018
13:35:37
Очевидно, что если хочешь быстро - "не обязательно собирать всё, чтоб проверить маленький кусочек". Транслируя в тесты - не обязательно тестировать всё, чтобы проверить маленький кусочек. Смысл один - много кода = долгая сборка / долгие тесты. Это неизбежно.

Aleh
03.05.2018
13:38:51

Дмитрий
03.05.2018
13:41:56
Ох уж ето программирование без снапшот тестов
Проблемы и новые термины там где о тестах даже вспоминать не требуется

Aleh
03.05.2018
13:43:14
Снапшоты особо не решают ни какую проблему из обсуждаемых

Google

Aleh
03.05.2018
13:43:19
Штука хорошая да

Дмитрий
03.05.2018
13:44:07
Просто не парят голову
Bddtddhdd is dead is alive пофигу

Igor
03.05.2018
14:12:43

Aleh
03.05.2018
14:13:31

Igor
03.05.2018
14:14:44
А ну те я правильно понял, что это про фронтенд (хотя идея конечно гуд)

Дмитрий
03.05.2018
14:37:57
Ещё носик поморщить нужно, ага
?
Я например так тестирую парсеры и грамматики, так как заматчить огромный ast проще чем описывать правила для его проверки
И многое другое
В целом всё, что генерирует однозначную структуру данных гораздо проще тестировать именно так
Стыдно должно быть прозевать новые технологии с мотивом А НУ ЕТО ДЛЯ ФРОНТА ЖЕ

Михаил
03.05.2018
14:56:47
У меня новая порция вопросов по тестированию. Предположим, я пишу пакет, который работает с файловой системой. Вынести все операции низкого уровня с файлами в отдельный слой абстракции, написать для тестов отдельный класс-заглушку, который будет внутри себя эти операции считать, - нормально?
И второй вопрос - куда его лучше закинуть, в основное пространство имен пакета или к тестам?

Дмитрий
03.05.2018
15:06:58
Хотя конечно смотря насколько сильно абстрагируешься ?

Adel
03.05.2018
15:08:23
только это стабом называется. а не моком.

Михаил
03.05.2018
15:09:48
Логично, спасибо

Дмитрий
03.05.2018
15:10:27

Dmitriy
03.05.2018
15:17:49

Google

Igor
03.05.2018
15:36:52
Ну все же согласны что моков надо избегать (по возможности) и пытаться больше делать стабами?

Dmitriy
03.05.2018
15:37:58
Нууу, не все. Я тут намедни спорил, что это раскрытие реализации в тестах. Кому-то так более удобно

Sergey
03.05.2018
15:40:33
ну то есть вопрос весь в том что бы как-то контролировать сайд эффекты

Roman
03.05.2018
15:41:13

Sergey
03.05.2018
15:41:16
моки нужны только для тестирования сайд эффектов, и если тебе эти сайд эффекты проверять не надо, то не надо мокать.

Igor
03.05.2018
15:42:50
(ok ok гляну (ну те добавлю в watch later))

Sergey
03.05.2018
15:42:59
во всяком случае по твоим репликам я могу составить определенную картину того в чем проблема (возможно, возможно никакой проблемы нет)

Roman
03.05.2018
15:46:24
Этот консультант говорит как политик -- все очень красиво, но к реальности мало применимо.
Сначала его выступление мне тоже понравилось, но через месяц понял, что он просто людей наебывает
Тестировать инпут и аутпут всего и вся -- оверхэд. Нам же конечную задачу нужно решить и быть уверенными, что конечная задача работает правильно. А как там классы под капотом общаются, нам все равно. Не так ли?


Sergey
03.05.2018
15:50:25
в целом идею можно свести к контрактным тестам (которые нужны особенно на границах модулей) и к тому что бы уменьшать количество зависимостей. И если у тебя не выходит уменьшить количество зависимостей - перераспределить все так что бы был метод-сценарий в котором нет логики и только последовательность действий.
ну то есть, все это не рокет сайнс
и да - важный аспект - он ничего не говорил о том что e2e/приемочные тесты не нужны, только интеграционные которые подразумевают тестирование какой-то технической фигни (вроде потещу я сервис и сущность)
и да, никто не говорил что с такими идеями можно просто взять подходы к которым все привыкли и просто "делать так". Так оно не работает. И да, я из-за этого видоса полес в event-driven архитектуры.


Igor
03.05.2018
15:58:14
А до property-based еще не дошел?

Дмитрий
03.05.2018
15:59:33
Сугубо опциональный подход

Google

Roman
03.05.2018
16:05:44
может быть вопрос в том как ты границы проводишь? и как ты выбираешь что покрывать юнитами а что покроется e2e?
Я не могу с первого раза провести границы "правильно". И со второго тоже. Вы можете?
Я пишу тест на том уровне абстракции, на котором в данный момент понимаю задачу, а потом по необходимости спускаюсь дальше. Если перед началом работы над задачей мне известно только то, что я могу решить ее с помощью "технической фигни", то я буду писать тест на техническую фигню. И это нормально. Может я никогда и не напишу "настоящий unit-тест" для этой задачи, потому что буду уверен в ее работоспособности и без него.


Sergey
03.05.2018
16:24:57
Я не могу с первого раза провести границы "правильно". И со второго тоже. Вы можете?
Я пишу тест на том уровне абстракции, на котором в данный момент понимаю задачу, а потом по необходимости спускаюсь дальше. Если перед началом работы над задачей мне известно только то, что я могу решить ее с помощью "технической фигни", то я буду писать тест на техническую фигню. И это нормально. Может я никогда и не напишу "настоящий unit-тест" для этой задачи, потому что буду уверен в ее работоспособности и без него.
я тоже не могу, но я могу границы менять, да и тесты хорошо помогают эту границы определять (думать).
Контракты мы проектируем все же исходя из нужд клиентского кода, и эти нужны вполне себе можно описать, так? Если так - нет проблем сделать тест контракта и в соответствии с этим же контрактом тестировать наш клиентский код закрыв его стабами/моками.
Более того, ты так можешь проектировать сам контракт, когда ты задаешь требуемое твоей зависимости поведение и переходишь к имплементации контракта этого уже после того как разберешься как оно должно работать.
> Может я никогда и не напишу "настоящий unit-тест" для этой задачи, потому что буду уверен в ее работоспособности и без него.
настоящий unit test это не сильвер булет, это инструмент позволяющий минимизировать фидбэк луп, ты должен осознавать недостатки этого инструмента (чувствительность к качеству кода, выбранным границам и связанности) и если ты выбираешь путь "забить на связанность пока не разберусь" то юнит тесты тебе мало чем помогут.
В этом нет ничего плохого, но думать что "у всех наверное так" тоже чет как-то плохая идея.
У меня полно функционала который я не хочу покрывать юнитами потому что.... ну а зачем? И я спокойно сплю по ночам с этим)) с другой стороны я лучше замокаю сущность чем буду тестировать в связке.


Aleh
03.05.2018
16:27:57
dummy там или stub если прям совсем сложно

Sergey
03.05.2018
16:28:45
не, именно мок сущности)
ну мол... у тебя есть сервис который дергает метод сущности, и сущность я замокаю

Aleh
03.05.2018
16:29:06

Adel
03.05.2018
16:29:49
т.е. ты должен будешь знать какой именно метод сущности дергает этот сервис?
какието таксебе тесты

Sergey
03.05.2018
16:30:02
окей, сервис через дабл диспатч в сущность)
и сервис замокаю

Igor
03.05.2018
16:35:47
ООП и моки - что может быть прекраснее ?
https://twitter.com/rabbitonweb/status/918473231216136192

Sergey
03.05.2018
16:36:19
есть еще неплохая статья на эту тему:
http://blog.thecodewhisperer.com/permalink/beyond-mock-objects

Roman
03.05.2018
16:49:40