Коль ты мне дал сюда ссылку, я тоже возьму и отпишусь
Самое базовое и фундаментальное отличие это то "что мы тестируем".
По TDD наша задача - протестировать метод. Всё. Мы не углубляемся в детали того что он делает. Мы просто стараемся прогнать его по всем возможным путям прохождения и тем самым достичь 100% покрытия.
В BDD мы уже не ограничены одним методом. Однако у нас есть различные варианты поведения, и тестируем мы уже определенные сценарии и хотим увидеть результат.
Пример: протестировать систему аутентификации:
По TDD мы будем тестировать функцию: "grantPermission"
По BDD мы будем тестировать "admin can access article", "user can access it's own article", "user cant access other users article".
В этом как бы основное различие. Такие элементы BDD можно юзать где угодно. Тот же everzet говорил, что вполне доволен возможностями PHPUnit для написания спеков. Какая разница как выглядят методы ассертов или описания. Главное - какие тесты пишутся.
----
Тут проскакивала ссылка на замечательную статью DHH Testiing Like TSA. Суть в том, что тестирование в рельсах построено скорее по BDD схеме. Девид не любит синтаксис RSpec, Cucumber, считая их избыточным. По сути правильно делает ведь отличия RSpec от того же Test::Unit приницпиально не очень значительное. И там и там используются схожие описания, и там и там тестирование идет через SpecBDD. То что отличия чисто синтаксического характера, и как такового спора в Руби тусовке нет, как по мне подтверждено выходом MiniTest.
----
В PHP SpecBDD отлично реализуется на PHPUnit. Хотелось бы конечно иметь более вкусный и читабельный синтаксис. Проблема скорее в том, что PHP не предоставляет возможность описывать некоторые спеки столь лаконично и там где обычно в руби идет одна строчка в PHP нужно писать 4 (это я про PHPSpec). Потому любые попытки портировать RSpec на PHP выглядят корявенько и не дают особых преимуществ над классическими юнит-тест фреймворками.