
Sergey
03.03.2017
13:31:37
я так заглушку для блокчейна поднимаю

Sergey
03.03.2017
13:31:47
>чтобы такое проверить полностью тебе нужно замокать эндпоинт на B
даже не обязательно мок. стаб поднял и норм

Sergey
03.03.2017
13:32:04
тебе надо подменить Б

Google

Sergey
03.03.2017
13:32:25
ок. подменили. а что с А и C?
дублировать тесты?

Daniel
03.03.2017
13:32:35
бля, пойду повешусь

Sergey
03.03.2017
13:33:58
в таком случае наверное проще сразу писать интеграционный тест на базовый кейс, и потом юнит тесты отдельно на каждый компонент с остальными кейсами

Sergey
03.03.2017
13:37:13
стабы
стабы юзать в интеграционных тестах можно
а вот моки - это ты в черный ящик влазишь

Sergey
03.03.2017
13:37:47
не я понял, перечитай заново условия

Sergey
03.03.2017
13:38:20
я часто делаю именно так как ты описываешь, но если ты на 100% не знаешь что будет внутри выгоднее потом юнит тест удалить
ты через юнит тесты как никак наружку объектов проектируешь а не их нутро

Sergey
03.03.2017
13:38:56
ну и плюс А и С могут зависить от других частей системы, и тогда нужно еще там мокать

Google

Sergey
03.03.2017
13:39:15
короч
юнит тесты - проверка и проектирование контрактов

Sergey
03.03.2017
13:39:45

Sergey
03.03.2017
13:39:47
интеграционные тесты - проверка того что все штуки вместе работают корректно и без них никак

Sergey
03.03.2017
13:39:56
и чем это отличается от изначального юнит теста который ничего не проверяет?

Sergey
03.03.2017
13:40:16
....если у тебя есть юнит тест который перестал что-либо проверять и начинает просто дублировать реализацию
ты его удаляешь и пишешь интеграционный
в интеграционных ты не можешь делать моков, но можно делать стабы (подменять зависимости на что-то полегче)
например я подменяю балансы юзеров в блокейне

Sergey
03.03.2017
13:40:59
я знаю что такое интеграционные тесты
я тебе говорю за конкретный кейс
а не абстрактные вещи

Sergey
03.03.2017
13:41:25
либо я чет не понимаю
и ты можешь менять порядок, добавлять пост/пред обработку ответов, делать что угодно
а тест будет только поведение объекта проверять
и по хорошему тесты никогда не должны знать как тестируемый код работает.

Google

Sergey
03.03.2017
13:42:49
function($data){
$result = $this->a->do($data);
$result = $this->b->do($result);
return $this->c->do($result);
}
A,C - зависят от базы, чтобы использовать реальные обьекты, нужны либо моки внутри A,C, либо поднимать базу
B - зависит от внешнего сервиса, который тоже затыкается
ты предлагаешь вместо A,B,C запихнуть моки. верно?

Sergey
03.03.2017
13:43:03
> B - зависит от внешнего сервиса, который тоже затыкается
затыкать его надо только если его нельзя просто так дергать

Sergey
03.03.2017
13:43:32
и зачем это если обычный юнит тест справляется на 100% со своей задачей?

Sergey
03.03.2017
13:43:34
обычно 0 можно

Sergey
03.03.2017
13:44:24
связать разные компоненты и дать интерфейс юзеру

Sergey
03.03.2017
13:46:40
и тебе проверить надо что все в сумме работает
юнит тест тебе тут соврет
ну мол
ты юзаешь 2 объекта

Sergey
03.03.2017
13:47:35
$result = $this->a->do($data);
return $this->b->do($result);
эти два объекта ничего не знают друг о друге и могут иметь разные контракты
и по сути твой тестируемый код должен эти контракты между собой связать
юнит тест соврет тебе потому что моки будут у тебя определять что возвращают штуки. И тесты буду проверять сами себя
то есть ничего
они ни проблемы не найдут ни помогут тебе
юнит тест для подобной фигни максимум поможет тебе с точки зрения декомпозиции
но как только ты разделишь эту штуку на тупой "менеджер" который тупо делигирует ответственность - юнит тест бесполезен

Google

Sergey
03.03.2017
13:49:26
и штук у тебя таких в любом случае будет минимум
а когда у тебя пирамида тестов состоит только из уровня "юниты" - все будет плохо
ну как.... наверное лучше чем без тестов вообще но всеж
....не убедил я тебя)
если что код в котором большая часть логики делигируется но есть какая-то обработка данных, if-ы и т.д. - тут юнит тесты норм

Sergey
03.03.2017
13:52:48
юнит тест тебе тут соврет
почему?
у тебя идут 3 мока
на А проверяется что в него приходит аргумент из тестируемого метода и он возвращает некий ответ а1
на Б проверяется что к нему пришли именно а1 и он возвращает б1
на С все тоже самое
в итоге если ты удаляешь что-то из цепочки, или меняешь местами А и Б у тебя все ломается и тест об этом говорит

Sergey
03.03.2017
13:53:34
ну то есть тебе по любому надо еще руками запустить такое что бы быть увереным что все работает
а это ровно то что делают интеграционные тесты

Sergey
03.03.2017
13:55:15
поднять и поддерживать инфраструктуру для интеграционных тестов не всегда так просто

Admin
ERROR: S client not available

Sergey
03.03.2017
13:56:17
в теории так и надо делать, но не всегда это оправданно

Sergey
03.03.2017
13:57:20

Sergey
03.03.2017
14:53:35
ребята, кто-нибудь использует teamcity для деплоя symfony проектов?

Alexander
03.03.2017
15:27:26

Sergey
03.03.2017
15:27:54
как деплоите parameters.yml?)

Alexander
03.03.2017
15:29:15

Sergey
03.03.2017
15:29:47
а с новыми параметрами как?

Alexander
03.03.2017
15:30:24
тоже ручками

Sergey
03.03.2017
15:31:02
как нибудь это бы тоже через тим сити делать, не знаете есть ли способы?

Google

Alexander
03.03.2017
15:31:41
Можно посмотреть в сторону переменных окружения
Типа какой-нибудь генератор parameters,yml на стороне тимсити и потом загрузка его на сервер

Alex
03.03.2017
15:39:08
Нужно больше информации

Sergey
03.03.2017
16:59:38

Pavel
03.03.2017
17:10:52
Incenteev/composer-parameter-handler и переменные окружения

Pavel
03.03.2017
17:30:47
Какого после перевого же исключения перестает идти луп foreach?
В list`e элеметнов 15, одно исключение вылазит и стопится

Sergey
03.03.2017
17:31:25
а откуда именно исключение падает?

Pavel
03.03.2017
17:31:34
Ну вот из тех что я ловлю
Первые два
Я их посылаю из классов, сам
Имеет значение откуда они? Это кастомные исключения

Sergey
03.03.2017
17:33:02
стопится в смысле он выше где-то ловится?

Pavel
03.03.2017
17:33:23
Ну в смысле просто уже пишет мол у контроллера нет возврата
Короче дальше первого элемента листа не идет, если там исключение. А почти во всех элементах исключение т.к. фильтр жестокий
Как такое может быть?

Sergey
03.03.2017
17:35:52
а какой именно цикл то?

Pavel
03.03.2017
17:36:01
foreach list

Sergey
03.03.2017
17:36:04
foreach($list as $videoLink) ?

Pavel
03.03.2017
17:36:20
Да

Sergey
03.03.2017
17:36:21
ну тогда все правильно. тебе нужно ловить внутри foreach