Ну если у тебя проверка уникальности завязана на ошибку FOREIGN KEY в БД, ты во-первых, не сможешь этот кейс нормально протестировать без БД, во-вторых может очень неожиданно вылезти побочный эффект.
Например, кто-то добавил код отправки уведомления менеджеру при сохранении. Уведомление отправляется перед сохранением. При ошибке уникальности, у тебя отправится уведомление, а только потом сработает ошибка. Итого, пользователь 9 раз сохранил с ошибкой, один раз успешно, а уведомлений отправилось 10 вместо 1.
Гораздо лучше, если валидация идёт перед сохранением в БД, как в обычном валидаторе. В указанном примере, мы просто вызовем $model->validate() заранее, и в случае ошибки не будем ни уведомление отправлять, ни в базу записывать.
Ну и что? Протестирую с БД. Тесты делаются для приложения, а не приложение для тестов.
То, что вызывать нужно в некоем контектсе - это да, но в фреймворке много чего нужно вызывать в жестком контексте.
Просто у нас несколько другой контекст, для на. более оптимальный.
Сэкономить можно не один, а под десяток запросов.
Данные у нас обычно очень ветвистые.
Так что, у всего есть своя область применения...