Такой вопрос, как правильно тестировать компоненты в которых есть выборки через ActiveRecord, вот простой пример:
Код: Выделить всё
<?php
class NotApprovedPostsNotifier
{
private function sendMessage($posts)
{
// отправка сообщения модератору
}
public function notify()
{
$posts = Post::find()->notApproved()->all();
if (is_array($posts) && count($posts) > 0) {
$this->sendMessage($posts);
}
}
}
Меня смущает строка:
Код: Выделить всё
$posts = Post::find()->notApproved()->all();
Можно запрос выборки вынести в отдельный метод класса, но опять же если я его сделаю приватным, то замокать не смогу, разве что сделать protected, но тогда я раскрываю часть реализации наследникам, а это не совсем уместно.
Я кроме как писать интеграционный тест с фикстурами выхода не вижу.
Опытные разработчики, подскажите пожалуйста как вы это решаете именно с ActiveRecord? А то я уже начинаю посматривать в сторону Doctrine, там бы вставил репозиторий как зависимость, замокал его и проблем не знал, но меня останавливает что уже много на ActiveRecord написано и переписывать как-то желания не особо много, может есть другой выход именно для ActiveRecord.