Постарюсь показать, что знаю на простом примере. Допустим тебе нужно написать ф-ию умножения. В рамках TDD это будет выглядеть так.
Вот есть метод тестируемый
<?php
class MathematicsFunctions()
{
public function multiplication($a, $b) {
}
}
И вот есть сам тест.
Выглядит так. Подаем тестируемой ф-ии на вход самый простой пример? кот может быть. Это как несложно догадаться 0,0. Должны получить 0.
class MathematicsFunctionsTest extends PHPUnit_Framework_TestCase()
{
public function testMultiplication() {
$MathematicsFunctions = new MathematicsFunctions();
$result = $MathematicsFunctions->multiplication(0, 0);
$this->assertEquals(0, $result);
}
}
Запускаем, тест падает. Далее исправляем. Самым наилегким образом. Не нужно забегать вперед. А значит так.
class MathematicsFunctions()
{
public function multiplication($a, $b) {
return 0;
}
}
Следующий тест должен быть ровно настолкьо сложным, чтобы упасть. Для этого достаточно передать уже два числа, соот мы пропускаем ситуацию, когда могли бы обработать еще один легкий вариант с 0, 4 например.
class MathematicsFunctionsTest extends PHPUnit_Framework_TestCase()
{
public function testMultiplication() {
$MathematicsFunctions = new MathematicsFunctions();
$result = $MathematicsFunctions->multiplication(0, 0);
$this->assertEquals(0, $result);
$result = $MathematicsFunctions->multiplication(2, 3);
$this->assertEquals(6, $result);
}
}
Тест упал, исправляем.
class MathematicsFunctions()
{
public function multiplication($a, $b) {
return $a * $b;
}
}
Продолжая в таком темпе мы приходим к реализации метода от простого к сложному, зная при этом, что мы все учли. И так со всеми публичными методами.
Это я в общем привел пример того, как происходит разработка через тестирование. Как об этом рассказывают апологеты.
Пример привел к тому, что теперь посмотреть на вот это видео будет понятней, что к чему.
Вот один из примеров. Тут уже в 100 раз подробней все показано
https://vimeo.com/8506325http://osherove.com/tdd-kata-1/ Взято отсюда. Там полно реализаций на различных языках. Я обычно легкие вещи и на джава смотрю. На пхп не всегда бывает. В простых вещах обчно нет сложностей с языком. Главное сам подход.
На примере тестов видно как как мы шаг за шагом оптимизируем свой код.
Каждый раз запуская все тесты для всех методов, убеждаемся, что ничего не падает. Все равно при разработке, при деббагинге, когда у нас почему то ф-ия возвращает, не то,
что нужно мы занимаемся примерно тем же. Начинаем на каждом этапе дампить результаты и смотреть что происходит. Порой это отнимает очень и очень много времени. И исправив одно, забываешь о другом.
Изменения в дальнейшем какого нибудь метода может привести к поломке предыдущего но мы об этом забудем. Узнаем тогда когда нам тестировщики придут и сообщат, что какой нибудь синус неверно высчитывается сейчас.
Тесты помагает исключить весь процесс деббагинга и поиска непнятных ошибок, написав сразу чистый код(прям пафосная фраза из книжек по TDD невольно сорвалась с пера))) ) И не нужно при каждой новой фиче тестировать все и вообще непонятно как.
Запустил тесты. Все прошло. Значит ничего не сломалось. Ну как-то так.
Естественно все не так радужно как описывается в книжках. Но это помагает писать более качественный код и быстрее развиваться на мой взгляд.