Как замокать метод с обращением в БД

199
23 октября 2021, 01:40

Есть класс с двумя методами, один оперирует данными взятыми из второго. Нужно протестировать метод sum не получая данных из метода db, а подставив свои.

public function sum()
{
    $db = $this->db();
    return $db['a'] + $db['b'];
}
private function db()
{
    return ['a' => 1, 'b' => 3];
}

Пробовал замокать метод db и протестировать вот так

$this->class = $this->make(ClassName, [
    'db' => function() {
        return ['a' => 4, 'b' => 2]
    }
]);
$this->assertSame(6, $this->class->sum());

но при тесте мои данные не подставляются, по прежнему db вызванный в методе sum возвращает старый массив ...

Answer 1

Вот так я делал, чтобы замокать метод.

    $class = new class () extends ClassName
    {
        private function db()
        {
            return ['a' => 4, 'b' => 2];
        }
    };
    $this->assertSame(6, $class->sum());
READ ALSO
Получить все возможные значения из БД

Получить все возможные значения из БД

У меня есть система файлов и папокВ данном контексте - папка и файл некое структурированное значение в БД

197
Как писать один лог одновременно несколькими обработчиками? PHP

Как писать один лог одновременно несколькими обработчиками? PHP

Вернее, обработчик один, но много запросов идут вместе (телеграмм бот)Заметил, что в логе в пиковые моменты далеко не вся информация записана,...

153
Как подключить расширения в php

Как подключить расширения в php

Laravel требует чтобы были установлены следующие php расширения:

192
Рекурсивное добавление в массив

Рекурсивное добавление в массив

Почему не срабатывает такая запись? выдает:

126