
Shadow
29.11.2016
09:37:46
лекция для чатика пхпГиков

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

Roman ?
29.11.2016
09:37:55

Shadow
29.11.2016
09:38:00
да

Google

Roman ?
29.11.2016
09:38:09
давно пора начать хуячить через TDD

Shadow
29.11.2016
09:38:53
мой тест драйв
print_r($out);die;

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

Артур Евгеньевич
29.11.2016
09:40:05

Котяй Негодяй
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'а.

Shadow
29.11.2016
09:42:44
магия

Артур Евгеньевич
29.11.2016
09:43:41

Roman ?
29.11.2016
09:43:54

Котяй Негодяй
29.11.2016
09:44:12

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

/
29.11.2016
09:44:40

Котяй Негодяй
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

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
09:59:47

Артур Евгеньевич
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
когда какой-то тест становится слишком уж большим и комплексным, но так надо, то на него пишется еще один маленький тест, который поможет понять, что тот большой правильно работает :)
более, чем реальная практика, но тут ключевое слово "вынужденно очень большой и сложный тест"
т.к. в идеале тест должен быть неимоверно простым