Отчасти это зависит от вашего подхода. Если у вас уже есть код на месте, и вы создаете модульные тесты после создания кода - я бы начал с добавления некоторых окончательных приемочных тестов. Это будет осуществлять все слои.
Затем, когда вы будете вносить изменения в любую часть системы, я начну помещать модульные тесты вокруг изменяемого компонента - сначала просто протестировать существующую функциональность, а затем перейти к добавлению модульных тестов для новой функциональности. Это хорошо работает, если ваш код слабо связан и разбит на четко определенные компоненты. Если нет, то у вас много работы.
В зависимости от того, насколько у вас ограничен доступ к данным, я бы не стал писать здесь какие-либо модульные тесты, поскольку ошибки следует подбирать довольно эффективно, без необходимости их модульного тестирования.
Если вы начинаете с нуля, прочитайте BDD / TDD и используйте этот подход для обеспечения качества.