<?php
namespace app\models;
use app\models\relations\Categories;
class MenuSite {
//отправление дерева категорий пользователю
public function getMenu() {
$categoriesList = $this->categoriesList();
$treeCategories = $this->buildingTreeOfCategories($categoriesList);
return $treeCategories;
}
//получение списка категорий посредством SQL запроса
private function categoriesList() {
return $categoriesList = Categories::find()
->indexBy('id')
->asArray()
->all();
}
//формирование дерева с неограниченной вложенностью категорий
private function buildingTreeOfCategories($categoriesList) {
$treeCategories = [];
foreach($categoriesList as $id => &$category) {
if ($category['id_parent'] === '0') {
$treeCategories[$id] = &$category;
}
$categoriesList[$category['id_parent']] ['subcategories'][$category['id']] = &$category;
}
return $treeCategories;
}
}
Добрый день. Меня интересует вопрос касательно того, каким образом правильно протестировать дынный класс.
SQL запрос реализован в отдельном приватном методе "categoryList", а собственно его и хочется замокать, но при этом не хочу нарушать инкапсуляцию класса посредством модификатора PUBLIC, ведь приватные методы не мокаются.
Есть ли какая-то возможность замокать сам класс "Categories" так, чтобы весь класс "MenuSite" при обращении к данному классу "Categories" обращался к моку а не к классу Categories непосредственно?
Или для адекватного теста мне все равно придется сделать метод "categoryList" публичным?