glebvvvsss
@glebvvvsss

Как протестировать данный класс?

<?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" публичным?
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы