<?php <br>
<br>
namespace app\models;<br>
<br>
use app\models\relations\Categories;<br>
<br>
class MenuSite {<br>
<br>
//отправление дерева категорий пользователю<br>
public function getMenu() {<br>
$categoriesList = $this->categoriesList();<br>
$treeCategories = $this-
>buildingTreeOfCategories($categoriesList);
<br>
return $treeCategories;<br>
}<br>
<br>
//получение списка категорий посредством SQL запроса<br>
private function categoriesList() {<br>
return $categoriesList = Categories::find()<br>
->indexBy('id')<br>
->asArray()<br>
->all();<br>
}<br>
<br>
//формирование дерева с неограниченной вложенностью категорий<br>
private function buildingTreeOfCategories($categoriesList) {<br>
$treeCategories = [];<br>
foreach($categoriesList as $id => &$category) {<br>
if ($category['id_parent'] === '0') {<br>
$treeCategories[$id] = &$category;<br>
}<br>
$categoriesList[$category['id_parent']] ['subcategories']
[$category['id']] = &$category;<br>
}<br>
return $treeCategories;<br>
}<br>
}<br>
<br>
Добрый день. Меня интересует вопрос касательно того, каким образом правильно протестировать дынный класс.
SQL запрос реализован в отдельном приватном методе categoryList
, а собственно его и хочется замокать, но при этом не хочу нарушать инкапсуляцию класса посредством модификатора public
, ведь приватные методы не мокаются.
Есть ли какая-то возможность замокать сам класс Categories
так, чтобы весь класс MenuSite
, при обращении к данному классу Categories
обращался к моку, а не к классу Categories
непосредственно?
Или для адекватного теста мне все равно придется сделать метод categoryList
публичным?
Можно использовать магический метод __call()
. Он вызовется, когда будет попытка обращения к недоступному методу, и можно самостоятельно построить дальнейший сценарий. Пример:
public function __call($name, $arguments) {
if ($name === 'categoriesListTest') {
return $this->categoriesList();
}
}
Для начала убери html теги из кода php (или тупой редактор от stackoverflow снгшный тебе так отредактировал что код стал в таком виде) Который раз, уже вижу - эти редакторы, модераторы входят, изменяют вопрос и все портят) Пока не уберешь brы интерпретатор не зачитает твою программу. А обратиться к классу и использовать его методы с функциями можно вот так $object = new Class;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можно ли из вебхука записывать историю в лиде или сделке, при их изменении и если да то каким образом(хотя бы ссылочку на api)
По видеогайду делаю структуру MVC и хочу использовать RedBeanPHP внутри классов , только вот не знаю как подключитьСтандартное подключение