@symfony_php

Страница 126 из 1418
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
ок. подменили. а что с А и C?
а их реальные юзать. Никогда не делал вещей вроде InMemoryRepository?

стабы

стабы юзать в интеграционных тестах можно

а вот моки - это ты в черный ящик влазишь

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
ну и плюс А и С могут зависить от других частей системы, и тогда нужно еще там мокать
о чем ты? ты либо мокаешь A и C либо у тебя нарушен закон деметры

короч

юнит тесты - проверка и проектирование контрактов

Sergey
03.03.2017
13:39:45
о чем ты? ты либо мокаешь A и C либо у тебя нарушен закон деметры
ооокей) и мы вернулись к тому что у нас тест, в котором А,B,C замоканы

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: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 проектов?

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

Alexander
03.03.2017
15:29:15
как деплоите parameters.yml?)
при первой инициализации создаю его ручками

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

Страница 126 из 1418