@prophp7

Страница 89 из 1387
Sergey
27.11.2016
15:40:27
https://3v4l.org/cik4l

Serghei
27.11.2016
17:17:41
Есть тест для логера. Логер что-то там пишет в файл. Иногда тесты валятся потому что в логе [Sun, 27 Nov 16 17:03:46 +0000][DEBUG] Hello а мы ожидаем [Sun, 27 Nov 16 17:03:45 +0000][DEBUG] Hello не всегда такое, но бывает. учитывая факт что тестов становится все больше и больше, тестовый енв становится все тормознутей, предполагаю что подобные фейлы будут проявляться чаще; да и оно может случатся когда лог пишется на границе секунд например. подкиньте идею, какой нибудь не заморочливый способ тестировать это дело. я в том плане чтоб тест не превратился по сложности в трудно понятный код. $logger->log($level, 'Hello'); $logger->close(); $I->amInPath($this->logPath); $I->openFile($fileName); $expected = sprintf( "[%s][%s] Hello", date('D, d M y H:i:s O'), $name ); $I->seeInThisFile($expected); // фейлится тут

Sergey
27.11.2016
17:19:55
> подкиньте идею, какой нибудь не заморочливый способ тестировать это дело регуляркой?

вместо строк

Google
Serghei
27.11.2016
17:20:10
как вариант да, думал

Sergey
27.11.2016
17:20:23
ну что бы не завязываться на конкретных данных зависящих от времени

а прочерять что-то типа

Serghei
27.11.2016
17:20:45
если ничего не придумаю - буду регуляркой

Sergey
27.11.2016
17:21:00
а что тут еще можно придумать? мокать время? так себе идея

[TIMESTAMP][DEBUG] Hello

а потом тупо preg_quote + str_replace

Serghei
27.11.2016
17:22:24
угу

Sergey
27.11.2016
17:22:29
что бы было красивенько

еще клевая штука

интеграционные тесты которые проверяют что мы вообще умеем писать в файл правильно

и юнит тесты которые проверяют что именно мы пишем

это было бы грамотнее

Google
Sergey
27.11.2016
17:23:45
в интеграционных тестах проверять тупо наличие строк, а не их содержимое

$writer->write(sprintf('[%s][%s] %s'), $timestamp, $level, $message));

и в юнит тестах мокать $writer

а интеграционными покрывать что он вообще может писать

Aleh
27.11.2016
17:24:52
хз, насколько это оправданно. Если будет интеграционный тест, который для данного модуля протестит, что файл записался и записалось то, что нужно, то норм

в случаях с фс они выглядят одинаково сложно

Serghei
27.11.2016
17:25:03
да, все никак не соберусь это дело разделить. там частично намешано конечно интеграционных и юнит. но тестов > 1k и так-то они рабочие, просто не православные ) по этому я на них смотрю, вздыхаю, и откладываю эту идею на потом

Sergey
27.11.2016
17:25:30
> в случаях с фс они выглядят одинаково сложно интеграционным тестам райтера нужно проверить только то, в каком порядке чего записалось, не затерлось ли, проверить стримы и т.д

ну и отдельный бонус - можно потом будет делать отдельные райтеры

например в syslog

а не в файл

или в memry stream

хотя хер его знает

я логгеры никогда не писал)

Aleh
27.11.2016
17:26:17
я понимаю про что ты, DIP там, все дела

абстрактные врайтеры

Sergey
27.11.2016
17:26:34
скорее SRP и сегрегация интерфейсов

Serghei
27.11.2016
17:26:37
нада в монолог посомотреть еще

как ребята тестируют

Sergey
27.11.2016
17:27:08
у них писатели отдельно и форматтеры отдельно

Google
Sergey
27.11.2016
17:27:10
насколько я помню

Aleh
27.11.2016
17:27:13
Sergey
27.11.2016
17:27:22
оно все связано))
ну тип того)

S

S - Про то, как делить на части исходя из возможных изменений O - Про то, как расширять функционал не внося изменений в код L - Про то, как грамотно строить абстракции и предотвращать несовместимые интерфейсы I - Про то, как уменьшить связанность и добиться тотального контроля за тем, кто что юзает и кому что на самом деле надо D - Про то, как обезапасить одни модули от изменений в других модулях

в общем и целом SOLID это про protected variations из GRASP

или как сделать так что бы "работает не трогай, особенно если на это что-то завязан кто-то другой"

Serghei
27.11.2016
17:31:25
форматеры и у меня отдельно

думаю да, самым правильным будет переписать тесты на интеграционные и юнит

спасибо Серый

Fayozjon [CybernatiC]
27.11.2016
17:34:13
Мне кажется или вы работаете в телеграме? Постоянно онлайн :)

@fes0r особенно

Fayozjon [CybernatiC]
27.11.2016
17:34:33
:)

Sergey
27.11.2016
17:34:40
достаточно просто не выключать ноут

и ты всегда будешь онлайн

с телефоном еще проще

Fayozjon [CybernatiC]
27.11.2016
17:35:01
:)

Sergey
27.11.2016
17:36:21
воскресенье ж

Fayozjon [CybernatiC]
27.11.2016
17:37:25
Как давно у вас отключали электричество ?

Сорри что оффтоп

Google
Sergey
27.11.2016
17:37:54
настолько татально что не можешь уже телефон зарядить?

хм...

вот если прям сейчас у меня вырубят свет

ноут проживет еще часоов 7-8

Fayozjon [CybernatiC]
27.11.2016
17:38:33
У меня уже ноут тютю

Sergey
27.11.2016
17:38:38
телефон можно подключить и тоже чутка подзарядить

Fayozjon [CybernatiC]
27.11.2016
17:38:48
:)

Sergey
27.11.2016
17:38:57
а еще... могу пожервтвовать батареей электронки и ими заряжать телефон

и прожить так еще часиков 8

Serghei
27.11.2016
17:47:32
power bank же

Admin
ERROR: S client not available

Sergey
27.11.2016
21:40:07
вот все знают что null это плохо и вместо $user = $this->userRepository->find(1); if(null === $user){ .... } должно быть try{ $user = $this->userRepository->find(1); }catch($e){...} но мне одному кажется что это как-то некрасиво чтоли выходит?)

Sergey
27.11.2016
21:57:17
я делаю так

``` interface UserRepository { public function get(int $user): User; public function find(int $user): ?User; }

хотя сейчас задумался

мне find по сути нужен сейчас в основном что бы кинуть "другое" исключение

хм....

хм........

ну да

try catch норм

Google
Sergey
27.11.2016
22:01:08
try { $user = $users->get(42); } catch (UserNotFoundException $e) { $user = null; }

пожалуй перестану делать нулабл методы в репозиториях

пока за минуту не нагенерю "зачем"

Serghei
27.11.2016
22:13:43
а у тебя есть UserRepository::has ?

Aleh
27.11.2016
22:14:28
уверен, что если нужен

то есть)

Serghei
27.11.2016
22:15:05
тогда find ?User не нужен

Aleh
27.11.2016
22:16:24
не думаю, что это так вот прямо связано

Serghei
27.11.2016
22:17:13
думаю что репозиторий это коллекция, которой find не нужен если есть has

Aleh
27.11.2016
22:18:51
вот ща совсем не понял

Serghei
27.11.2016
22:19:40
http://shawnmc.cool/the-repository-pattern

ну например

Aleh
27.11.2016
22:20:10
ну я знаю, что такое репозиторий, лол)

у репозитория(коллекции) не может быть метода save

Serghei
27.11.2016
22:20:51
может

ты заголовок наверное прочел и закрыл

Aleh
27.11.2016
22:21:25
нет, полистал еще

ну вот в конце он чето про add написал

короче как has может избавить от find?

Serghei
27.11.2016
22:23:00
я к тому что у любой коллекции есть метод поиска

если есть has то использовать find просто чтоб поискать излишне

Aleh
27.11.2016
22:23:45
эм

что делает has, а то я кажется совсем перестаю понимать

Страница 89 из 1387