Зачем нужно тестирование?
Лет 7 назад я думал, что тестирование - это когда берётся программа и по очереди нажимаются все кнопочки и записывается результат. Для многих, к сожалению, это до сих пор так. Сейчас я понимаю, что основа тестирования - это классные модульные тесты.
Модульные тесты разделяют программу на части и доказывают, что каждая из этих частей работает. А это увеличивает вероятность работоспособности программы в целом :).
Преимущества модульных тестов
- Создавая модульные тесты, вы больше не будете бояться изменять старый код, боясь что-то там поломать и узнать об этом потом от пользователей. Если вы что-то поломаете, то сразу узнаете об этом и с хорошими тестами даже сразу увидите как исправить ошибку.
- Можно будет позволить себе писать чуть меньше документации, отправляя программистов, использующих/поддерживающих ваш код, читать тесты. Из хороших тестов понятно, что делает код и как его можно использовать.
- Написание тестов заставляет писать более правильные интерфейсы классов и их взаимодействия. К классам, где всё висит на соплях, просто не получится нормально написать тесты.
Естественно, это не панацея, но всё же уровень уверенности в коде и себе значительно увеличивает.
Люди, пишущие модульные тесты, обычно являются приверженцами “Разработки через тестирование” (Test-Driven Development). Основная идея - для добавления функциональности надо сначала написать тест, а потом уже код.
Цикл разработки
- Добавить тест
Для того, чтобы написать тест, разработчик должен чётко понимать требования к функциональности. Это заставляет хорошо разобраться с тем, как оно должно работать, до того как писать код. - Запустить все тесты и увидеть, что один не работает
Если вы добавили тест на функцональность, которой ещё нет, то тест должен провалиться. Если все тесты работают нормально, то либо кто-то уже реализовал нужную функциональность за вас, либо вы плохо написали тест. К сожалению, первое случается редко. - Написать нужный код
Пишите код для функции, которую вы тестируете. Можно писать как угодно некрасиво и неоптимизированно - главное, чтобы заработал тест. - Рефакторинг
Оптимизируйте код, пока не будете им довольны. Можно смело вносить любые изменения, ведь вы можете проверить всё с помощью тестов.
Наиболее распространённые средства для создания модульных тестов для PHP: PHPUnit и SimpleTest. Так как я люблю CakePHP, а в нём встроена поддержка SimpleTest, то я использую его.
[...] Test-Driven development, . “google” “yahoo”. [...]
[...] , , , - , . [...]
Для меня тема не раскрыта.
Дайте примеров.
@andrei:
Тестирование моделей
Тестирование компонентов