уже года 3 пишу все (что можно) по тдд, полет нормальный) Советую курс от Adam Wathan, мне в свое время даже первый бесплатный видос очень сильно помог.
От тестов требуется 2 вещи:
1. Они не должны оставаться зелеными, если проект не работает.
2. Они не должны краснеть, если код поменялся, но проект работает.
Так что самое сложное в тестах - это понять для себя, что покрывать юнит, а что фича тестами, чтоб это минимально тебя замедляло и давало максимальную надежность.
Фича тесты прекрасны, надежны и устойчивы к нонбрейкинг изменениям, но они очень плохо работают с ифами во флоу. Скажем, если у тебя на пути от получения реквеста до отдачи респонса стоит 3 обычных ифа (в контроллере, например, в сервисе, в модели) - это уже 2**3=8 фича тестов. Понятное дело, их все писать никто не будет. Поэтому в ход идут моки и юнит тесты.
Но юнит тест юнит тесту рознь. Можно прям все мокать, а можно использовать реальные объекты там, где выгодно. Теоретически это уже не совсем юнит тест, но именно такие тесты хорошо себя показывают. Тот же скоуп в модели можно протестить с моком билдера, а можно используя базу. С моком билдера - канонический юнит тест, но какой же он хрупкий и сложный в поддержке на практике.
Правильного решения на все случаи жизни не существует, увы, все зависит от проекта, опыта и личных предпочтений.