[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: TDD
Страницы: 1, 2
SoMeOnE
Arh
Да, все верно. Но только ты не после пишешь тесты. А сразу. Сначала тест. потом его реализацию заточенную под правильный результат. Усложняешь тест и опять подгоняешь под правильный результат, с учетом предыдущего теста. И так далее.

Тестирование проверят какой результат возвращается. Чтобы ты не вручную каждый раз все проверял, а сразу. Вот записаны у тебя все тесты на все эти варинанты, ты и тестируешь при каких параметрах все верно возвращается или нет. Допустим на вход один из параметров подал пустым должен получить в ответе
return 'Заполните все поля'; 

И конечно не совсем так. Вернуться должно толкьо true. А это в лог записать, а на клиенте обработать результат true/false и показать юзеру уже эту инфу.

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

Например

return arrray {
'result' => false,
'code' => self::NOT_VALID_DATA
}


В тестах соот можно и оба параметра проверять.
SoMeOnE
Ну грубо говоря твой тест, который проверяет данный метод должен быть таким.

if (user_add(тут неверные данные)  == 'всё не так, давай по новой') {
echo 'тест прошел';
} else {
echo 'тест провалился';
}

if (user_add(хотя бы одно поле не заполнено) == 'Заполните все поля') {
echo 'тест прошел';
} else {
echo 'тест провалился';
}

if (user_add(все тип топ) == 'Пользователь добавлен') {
echo 'тест прошел';
} else {
echo 'тест провалился';
}


И через месяц, когда нужно будет добавить возможность регистрации дпустим через соц сети, ты допишешь функционал. У тебя заработает рега через соц сети. А запустишь тесты у тебя провал. А потому что из соц сетей приходит такая инфа, которая у тебя в простой реге считалась невалидной. Грубый пример, но все же.
inpost
Arh
Цитата
1) не полный - должно вернуть "Заполните все поля"

Должно совпадать с тем, что ты хочешь. Если метод должен возвращать эти данные, то на наличие этих данных и надо проверять.

Вот ты показал пример метода. Ещё до его написания ты можешь смело написать TDD-тест:
if(user_add() != 'заполните все поля') echo 'Ошибка';
if(user_add('@list.ru') != 'неверно заполнен email') echo 'Ошибка';
if(user_add('inpost@list.ru') != 'Пользователь добавлен') echo 'Ошибка';


Но это ты сделал частичную проверку работы метода. А вдруг в методе ошибка добавления? То следующий тест:
if(user_add('inpost@list.ru') == 'Пользователь добавлен') {
$res = query("SELECT FROM .. WHERE `email` = 'inpost@list.ru'");
if(!$res->num_rows) echo 'Ошибка. Пользователь не был добавлен';
} else echo 'Ошибка. Пользователь не был добавлен';


П.С. писал на скорую руку, только суть пытался передать.

Цитата
Как будто специально пишите так, что бы напрочь запутать и отбить желание что то спрашивать.

Не знаю, не заметил подобного в ответах. Кажется разжевал ответ как мог :)

Делай так:
1) В уме продумай действия, которые должен "будущий класс/функция" выполнять.
2) Пишешь тесты. То есть всё совпадает как надо.
3) Пишешь сам класс/функцию, которые должны удовлетворять т/з. Пункт№2 он и тест, и, одновременно, твоё Тех/Задание на скрипт.
4) Класс готов, запускаешь тест. Если тест прошел успешно, то ты выполнил т/з, которое сам себе поставил для написания этого класса.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Arh
Цитата
В целом правильней вернуть массив.

Цитата
Но это ты сделал частичную проверку работы метода.


Давайте не будем усложнять, а то так дойдёт до "а лучше вообще было наследоваться от абстрактного класса, а лучше делать через API, это функция а не метод и еще ты забыл слово function" =)

Цитата
Ну грубо говоря твой тест, который проверяет данный метод должен быть таким.

Цитата
Вот ты показал пример метода. Ещё до его написания ты можешь смело написать TDD-тест:

Я кажется понял, просто должна быть отдельная страница, где запускаются нужные методы со все возможными вариантами ошибок.

Только не понятно почему нужно делать именно перед написанием когда, ну хорошо сначала сделали просто метод который делает все проверки, но не пишет это в базу - протестировали, раскоментировали или написали строчку записи в базу, еще раз протестировали.
Потом добавили в метод еще логики, протестировали что всё не посыпалось.
Потом еще добавили логики, опять протестировали. В итоге в основном тестирование проходит уже написанного метода, просто сам механизм тестирования написан раньше, а что мешает этот механизм написать после того как уже есть готовый метод?

Вообще идея понятна, что бы потом не искать ошибку, запускам тест и видим что какой то метод "false"

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Invis1ble
Цитата
Я кажется понял, просто должна быть отдельная страница, где запускаются нужные методы со все возможными вариантами ошибок.
inpost
Arh
Когда ты пишешь после, то ты пишешь то, что умеет делать твой скрипт, ведь ты его только-только написал. Будет проблемным писать после из-за этого, ведь если ты не предусмотрел плохие данные, то и тесты не нужны.
А вот при TDD ты устраиваешь штурм мозга и пишешь все безумные варианты приложения, ты пишешь тех/задание на скрипт(!), а это позволит тебе после писать более качественно без отклонений.
И верно ты заметил, это вообще отдельный файл, он не связан с функциональностью сайта в целом, это скрытый от глаз и доступный файл только для программиста, который он запустит и увидит работу теста.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Arh
inpost
Я имею ввиду доработку, что то улучшил/поменял/пофиксил в методе - запустил тест, что бы убедиться что не накосячил.

В итоге получается тестирование уже написанного кода - 1 раз еще не написанного и 100500 раз уже доработанного.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
inpost
Arh
Не понял. Улучшил ты код, далее ты запускаешь тест, чтобы удостовериться, что новым функционалом ты не поломал старый. Вот так вот)

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Arh
inpost
Ну я тоже самое написал)
Просто вы пишите что сначала нужно делать тест, потом писать код. Я написал что это только один раз, сделали тест - написали код, но остальные 100500 раз, вы пишите (дописываете) код и делаете тест, другая последовательность =)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
inpost
Arh
"делаю тест" - это не написание теста, а его запуск уже написанного для проверки. Создаётся новый тест до кода, а потом пишется код, в доработках, думаю, так же стоит.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
SoMeOnE
Arh, новый функционал в том же порядке. В идеале ты пишешь тест для нового функционала. Запускаешь тест. Он проваливается. Только новый тест проваливается. И начинаешь писать код под последний функционал. Дописываешь, запускаешь тесты. Все работает. Все, цикл закончился.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.