Ошибки с помощью Exception или строки?
Конечно же в коде нужно использовать исключения. И в тестировании они проще и это просто логично! Если вы используете типизацию в php и вам должен возвратиться объект City, то возвращая строку или массив вы получите ошибки. Тут без исключений уже не обойтись. Поэтому, если вы хотите писать код правильно - вам нужно использовать в домене только исключения!
А try-catch можно инкапсулировать в коде, если не нравится.
Дополню ответ Максим :
В своих проектах я всегда начинаю с того, что пишу какой-то базовый Exception, типа AppException, который всегда ловится Exception Handler'ом и отдает инфу юзеру. Он же висит в списке $dontReport, так как это всегда ожидаемая мной ошибка, о которой я не хочу быть уведомленным.
Собственно если я хочу, что бы ошибка попала в логи, потому что такой ситуации не должно быть - обычные встроенные эксепшены типа AssertionError, IllegalArgument, LogicException и так далее. Если не хочу - AppException и наследованые от нее.
Тогда почти везде в контроллерах пропадают try-catch'и за счет exception handler'а.