@phpgeeks

Страница 2582 из 8430
Shadow
29.11.2016
09:37:46
лекция для чатика пхпГиков

Котяй Негодяй
29.11.2016
09:37:51
Ну, есть unit-тесты, есть функциональное тестирование. Про первое рассказывать нужно?

Shadow
29.11.2016
09:38:00
да

Google
Shadow
29.11.2016
09:38:53
мой тест драйв

print_r($out);die;

Котяй Негодяй
29.11.2016
09:39:30
Сперва про второе. Функ. тестирование — это описание того, как должно работать приложение. В идеале, это форма для заполнения. В РБТ у нас были гугло-формы. Проходишься по ним, кликаешь по сайтику. Если что-то отличается от написанного, заводишь багв джире. Как-то так.

Котяй Негодяй
29.11.2016
09:40:09
Но это пиздец пиздецкий. Обезьянья работа. Лучше свести необходимость в ней к минимому и отдать а аутсорс.

Ага.

Юнит-тесты работают так:

Артур Евгеньевич
29.11.2016
09:40:52
https://habrahabr.ru/post/138223/ просто тут вроде описывается автоматизация этого процесса

я вот и запутался

Shadow
29.11.2016
09:41:22
я зашёл на кодеварс и там увидел либру с юнит тестами так и запутался

Google
Артур Евгеньевич
29.11.2016
09:41:29
<?php $I = new WebGuy($scenario); $I->wantTo('see my site is working'); $I->amOnPage('/'); $I->see('Welcome, on my site!'); ?>

Котяй Негодяй
29.11.2016
09:42:43
Ты подключаешь тестируемую функцию, подменяешь её зависимости заглушками, вызываешь её с разными аргументами, заранее объявляя результат, или его признаки, который она должна вернуть. Если не сходится, тест падает с подробным отчётом о несовпадении в виде DIFF'а.

Котяй Негодяй
29.11.2016
09:44:12
https://habrahabr.ru/post/138223/ просто тут вроде описывается автоматизация этого процесса
Ну, вроде как, функ. тестирование можно на фронтенде автоматизировать. Это всё, что я знаю. Достаточно сложный стек. В РБТ мы до него не дошли, а на текущем месте необходимость отсутствует — нам всё это заменят юнит-тесты, ибо реакт.

Артур Евгеньевич
29.11.2016
09:44:35
Ок, давайте теперь с интеграционными)

/
29.11.2016
09:44:40
я проделал вот примеры с сайта - https://docs.docker.com/docker-for-windows/ но я немного не понимаю где мой код будет? у меня же на машине не в контейнере
просто очень круто получается. весь прод софт стоит, разварачивается быстро и юзай под виндой как на линхе https://habrahabr.ru/post/315738/

Котяй Негодяй
29.11.2016
09:46:21
Ок, давайте теперь с интеграционными)
Вообще никогда не использовал такой термин. Гугл говорит, что это тестирование взаимодествия твоих модулей. В общем, да, есть смысл выделить это в отдельную категорию.

По логике: Если ты тестируешь все свои функции, подменяя все их зависимости заглушками, ты сразу определяешь, какой модуль работает неправильно и ловишь баги.

НО

Тебе нужно быть уверенным, в том, что верна сама архитектура, что твои компоненты совместимы.

Roman ?
29.11.2016
09:48:20
Котяй Негодяй
29.11.2016
09:48:46
Они могут работать правильно с автономной точки зрения, но они могут быть неверно спроектирваны в контексте системы.

Roman ?
29.11.2016
09:49:53
по юнит тестам и автоматизации - почитать бы чего нибудь. например, как делать надо и как делать не надо.

Артур Евгеньевич
29.11.2016
09:50:25
чет я не понял что имеется ввиду под компонентами. Микросервисы, разные классы, или что?

Google
Артур Евгеньевич
29.11.2016
09:50:43
примеры какие то убогие везде

Roman ?
29.11.2016
09:50:59
я вообще не вдпуляю пока как их писать
я много раз пытался вдуплить, но да, примеры убогие

Артур Евгеньевич
29.11.2016
09:51:02
assertEqual

и все

Котяй Негодяй
29.11.2016
09:51:53
Короче. Опять же, на предыдущем месте, у нас не было необходимости в интеграционном тестировании, т.к. все юнит-тесты писались без заглушек. В результате, если они где-то падали, то падали и все тесты зависимого кода. Это затрудняло поиск ошибки, но избавляло от необходимости понимания, что стоит подумать о тестировании взаимодествия компонентов.

Артур Евгеньевич
29.11.2016
09:52:38
а вот если без заглушек(моканье вроде же = заглушки?) то как например тестируются методы создания новой сущности

например есть у меня какой то объект фабрика, который занимается клонированием

Denis
29.11.2016
09:53:10
за рекламу того канала я больше предупреждать не буду. сразу в бан

телеговский для похапешников

злые они)

Артур Евгеньевич
29.11.2016
09:53:23
и как от проверить что он создаст клон корректно и свяжет с новой сущностью в базе

Котяй Негодяй
29.11.2016
09:55:22
и как от проверить что он создаст клон корректно и свяжет с новой сущностью в базе
Из юнит-тестов нужно убрать всё взаимодействие со внешними системами. ТЕстирование работы непосредственно с БД — хз, как делать. =) Я об этом не думал. У меня нет такой необходимости, в принципе.

например есть у меня какой то объект фабрика, который занимается клонированием
Есть всякие accertion-библиотеки, которые могут сопоставлять твои требования с реальным результатом. Это нужно загуглить и почитать. Там довольно мощный инструментарий.

Shadow
29.11.2016
09:57:28
это канал ж для пхп)

Ребят можно вопрос по го?

плиз

Vadim
29.11.2016
09:57:53
есть чат по го)

Google
Shadow
29.11.2016
09:58:00
о влс

Артур Евгеньевич
29.11.2016
09:58:46
Ну до конца не разорался но чуть полегче стало)

Вообще хорошо бы книжку почитать про это дело)

Артур Евгеньевич
29.11.2016
10:00:00
эт я сморел

Котяй Негодяй
29.11.2016
10:00:22
Попробуй написать пару тестов для простых функций без зависимостей.

Артур Евгеньевич
29.11.2016
10:00:32
https://phpunit.de/getting-started.html

я вот не понял их пример

Admin
ERROR: S client not available

Артур Евгеньевич
29.11.2016
10:00:45
что он нам вообще дает

$this->assertEquals(-1, $b->getAmount());

чего ожидать от этой функции

Котяй Негодяй
29.11.2016
10:01:37
assertEquals() проверяет соответствие.

Vadim
29.11.2016
10:01:56
есть еще assertSame() интересная штука, было открытием для меня :)

Котяй Негодяй
29.11.2016
10:01:58
Там может быть не только -1, но и два массива в разном порядке.

Или два разных объекта.

Но если они соответствуют, assertEquals одобрит.

Артур Евгеньевич
29.11.2016
10:02:31
А если не одобрит?

то это как ошибка будет и тест не пройден?

Vadim
29.11.2016
10:02:53
да

Google
Vadim
29.11.2016
10:03:02
на то он и assert

Котяй Негодяй
29.11.2016
10:03:02
Вывалит исключение в консоль с ошибкой и, что главное — DIFF'ом.

То есть ты сразу увидишь, чем отличаются ожидаемый и реальный результаты.

Артур Евгеньевич
29.11.2016
10:04:45
Ну и вот мы подошли к основной причине моего непонимания, что нам этот тест дает то по факту? типо мы в будущем сможем что то поменять в классе Money и поломать метод Negate и незаметить, а тесты нам помогут в этом?

Котяй Негодяй
29.11.2016
10:05:13
Ага.

Если поведение изменяется по-плану (типа так и надо), актуализируются и тесты. Это и есть TDD: тесты — это документация.

Артур Евгеньевич
29.11.2016
10:06:36
я дуал tdd это когда сначало тесты пишешь, и потом под них подгоняешь прогу)

Roman ?
29.11.2016
10:06:39
типа сначала нахерачить тесты, а только потом код?

вот да

я тоже так думал про TDD

Котяй Негодяй
29.11.2016
10:06:51
Но все мы грешны.

В идеале так проще, т.к. ты уже никогда не забудешь, как работает функция. А если будешь писать тесты через полгода, то можешь и не узнать свой код.

Vadim
29.11.2016
10:08:24
есть еще прикольный прикол

тесты на тесты

Котяй Негодяй
29.11.2016
10:08:33
Профит есть. Но спроектировать всё так круто, чтобы заранее была видня вся-вся-вся архитектура, сложно.

Roman ?
29.11.2016
10:09:05
тесты на тесты
а потом тесты на тесты для тестов?

Vadim
29.11.2016
10:09:10
когда какой-то тест становится слишком уж большим и комплексным, но так надо, то на него пишется еще один маленький тест, который поможет понять, что тот большой правильно работает :)

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

т.к. в идеале тест должен быть неимоверно простым

Страница 2582 из 8430