я сейчас пока что остановился на TDD, стараюсь по возможности писать код сразу с тестами. Так он более простым и заменяемым получается. По большей части тестирую именно какие-то бизнес-требования (сколько товара в корзину по факту упало, правильность подсчета скидок и тому подобное), но иногда могу и переупороться тестами
TDD рулит. Но он же про покрытие кода, классов тестами. Не функциональности, а кода. То есть перед написанием кода, напиши тест, который будет валиться, потом пиши код до тех пор, пока тест валится. Как только тест прошел - работа сделана. Или у вас для тдд функциональные тесты? Вида: клиент залогинился, кинул заказ, проверить что у него соответствующее количество денег списалось?