@oop_ru

Страница 49 из 785
Sergey
28.12.2016
00:14:59
функциональность не меняется, меняется способ. Но тебе почему-то придется полностью переделывать тест

da horsie
28.12.2016
00:15:09
а стало быть это не "реального гита" а то как ты запишешь респонсы
Ну я предполагаю, что гит не изменит свой интерфейс

Sergey
28.12.2016
00:15:29
возможно завтра ты захочешь получать список тегов другой командой

da horsie
28.12.2016
00:15:34
Один раз я взял от него реальный ответ и играюсь с ним

Google
Sergey
28.12.2016
00:15:44
попробуй написать такой код)

da horsie
28.12.2016
00:15:48
Выполню реальную команду, скопирую ответ

И вставлю в тест

Sergey
28.12.2016
00:16:17
окей. Ты юзал доктрину?

ну или там.... любой query builder

ты бы стал его мокать?

насколько ты думаешь это адекватно?

da horsie
28.12.2016
00:17:04
Это очень геморно

Но я хз как это правильно сделать

Sergey
28.12.2016
00:17:18
помимо того что это геморно, вы этом нет никакого смысла

просто потому что все что ты делаешь - дублируешь реализацию

da horsie
28.12.2016
00:17:25
А как надо?

Google
Sergey
28.12.2016
00:17:35
интеграционные тесты)

ты берешь и изолируешь всю работу с query builder-ом в маленькую изолированную хрень

и ее тестируешь интеграционными тестами может даже с реальной базой данных

da horsie
28.12.2016
00:18:15
Ну как-то так и приходится

Sergey
28.12.2016
00:18:17
сам по себе query builder полностью на 100% покрыт юнит тестами

точно так же как в твоем примере Shell на 100% работает

и git на 100% работает

da horsie
28.12.2016
00:18:44
Поэтому я не пользую доктрину на простых проектах, а пишу собственные мапперы на пдо

Sergey
28.12.2016
00:18:51
и вместо того что бы их "подделывать" проще взять и проверить в реальности

Sergey
28.12.2016
00:19:03
da horsie
28.12.2016
00:19:21
Sergey
28.12.2016
00:19:29
ну так причем тут доктрина?)

у меня все что знает о доктрине лежит в репозиториях (и в read моделях)

и покрывается это только интеграционными тестами. И логики там нет.

тупо выборки

da horsie
28.12.2016
00:20:01
Да

Именно так

Sergey
28.12.2016
00:20:17
и вот важный вопрос - что бы логики небыло

ты можешь например... просто прогонять какой-нибудь сборщик метрик и просто для некоторых классов контролировать цикломатическую сложность

Google
Sergey
28.12.2016
00:21:11
например "у всех репозиториев количество if-ов на метод не должно привышать"

(конечно не надо жестко ограничивать себя)

тут суть только в уменьшении количества тест кейсов

любое ветвление логики - увеличение тест кейсов

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

da horsie
28.12.2016
00:22:01
Но с доктриной и с файлами у меня просто выбора нет. А тут есть выбор - можно сделать отдельные методы.

da horsie
28.12.2016
00:22:26
О gitgateway

Sergey
28.12.2016
00:22:40
отдельные методы.... которые будут делать.... что?

ты можешь сделать например отдельный объект GitResultParser

da horsie
28.12.2016
00:22:57
Возвращать отдельное свойство отдельной ревизии

Sergey
28.12.2016
00:22:58
или что-нибудь эдакое

зачем?

то есть ты добавишь публичный метод тупо ради тестов?

da horsie
28.12.2016
00:23:37
Чтобы иметь более гранулярное покрытие тестами

Sergey
28.12.2016
00:23:58
лучше написать интеграционный тест чем добавлять публичный метод, который нигде не должен юзаться

da horsie
28.12.2016
00:24:14
Test induced damage, да

Sergey
28.12.2016
00:24:46
в этом как раз суть TDD - писать ровно столько сколько надо для решения задачи

Google
Sergey
28.12.2016
00:25:03
ты при помощи TDD придешь к тому что тебе нужен интерфейс GitIGateway

и все

дальше дробить или нет

это уже зависит от задачи

da horsie
28.12.2016
00:25:21
В целом мне кажется я понял свою ошибку, у меня в голове юнит=класс

Sergey
28.12.2016
00:25:27
в твоем случае это лишние слои абстракции которые попросту не будут приносить профита

В целом мне кажется я понял свою ошибку, у меня в голове юнит=класс
ошибка многих, я тоже так долгое время думал

http://martinfowler.com/bliki/UnitTest.html

вот тут очень хорошо расписано про это

в особенности про N определений юнит тестов

da horsie
28.12.2016
00:27:30
Да, в твоем подходе есть преимущество - он тестирует интерфейс целиком как смысловую единицу

Вместе с поведением

Sergey
28.12.2016
00:28:14
в этом видосе про integration tests are scam как раз говорится что тестировать нужно соблюдение объектом контракта. Не отдельные методы, а совокупность

da horsie
28.12.2016
00:28:26
Дада, я смотрел

Хороший видос

Sergey
28.12.2016
00:28:58
в целом все это больше поиск компромисом между скоростью выполнения и т.д

то же 100% покрытие кода тестами не нужно

потому что вопервых метрика крайне не эффективная (без мутационных тестов)

ну а во вторых многие вещи просто тупо нет смысла покрывать тестами. Они никогда не будут меняться

90% норм

Google
da horsie
28.12.2016
00:31:55
Клево

Большое спасибо

Очень познавательная беседа

Aleh
28.12.2016
10:07:29
https://gist.github.com/mkusher/d8b9a30c53da83f01341bfc6fa218900

Два хендлера. Делают одно и тоже, написаны немного по-разному

Sergey
28.12.2016
10:14:02
годнота

а коллекции в ts как выглядят?

Aleh
28.12.2016
10:14:48
Если просто массивы, то два варианта: T[] Array <T>

Sergey
28.12.2016
10:15:51
второй канеш

Aleh
28.12.2016
10:16:27
2 строки победили?) Мне тоже второй нравится)

Sergey
28.12.2016
10:17:48
ну я не вижу смысла в классе там где можно лямбдой разрулить

так посмотришь, вроде не сильно тошнотворно жс выглядит

Aleh
28.12.2016
10:19:09
С типами только если

Иначе будешь объект с массивом складывать

Sergey
28.12.2016
10:19:32
потом открываешь что-то типа https://gist.github.com/Enleur/e2a349b805d04a5b3fc39af62e3c46a0 ужасаешься и закрываешь

Aleh
28.12.2016
10:21:35
I'm back in ussr

Sergey
28.12.2016
10:22:18
прошло уже больше 5 лет, а стиль кода на жс у меня не менялся)

я правда уже не писал на нем года 2.5 точно

но наши фронты продолжают в том же духе все делать

Aleh
28.12.2016
10:24:49
Поставь им eslint с airbnb конфигом

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