Только начинаю погружаться в тестирование. Встала задача протестировать функцию модели, которая вызывает функции обновления базы данных. Прочитал, что тестить базу данных напрямую довольно сложно и решил просто мокнуть метод, который обновляет значения в бд. Вот примерный код того, что я имею ввиду:
class Model {
// метод который нужно мокнуть
public function update($values)
{
global $db;
$db->query('update ...');
}
// функция которую нужно протестить
public function change_time($start_time)
{
$end_time = $start_time + 1;
$this->update([
'start_time', $start_time,
'end_time', $end_time
]);
}
}
Естественно, в реальном приложении более сложные данные, и мне нужно проверить их корректность. По сути мне просто нужно отловить входящие данные в функцию update. Что-то вроде этого:
public function testEndTimeShouldBeCorrect()
{
$mock = $this->getMockBuilder(Model::class)
->setMethods(['update'])
->getMock();
$mock->expects($this->once())
->method('update')
->with($this->equalTo(5));
Model::change_time(4);
}
Подозреваю, что того о чем спрашиваю вряд-ли можно добиться, но буду благодарен если подскажите любую возможность протестить данный кейс. Спасибо.
P.S. Наверное можно возвращать в функции change_time данные, которые нужно проверить. Но думаю это будет выглядеть нелогично с точки зрения логики программы, и жертвовать этим ради тестов не стоит.