В Yii2 для работы с базой данных используется ActiveRecord, который не поддается тестированию. Поэтому используем класс-обертку, который уже использует ActiveRecord, и который можно замокапить.
Теперь появляется вопрос, как сделать, чтобы mock-объект работал как ActiveRecord, то есть имел CRUD функции без использования базы данных?
Самым простым и быстрым решением видится механизм, использующий массивы.
Например, запрос
$exists = User::find()->where(['username' => $username])->exists()
заменялся бы функцией
(тривиальный пример)
function exists($name, $value)
{
$user = null;
foreach($dbUsers as $dbUser) {
if ($dbUser[$name] == $value) {
return true;
}
}
return false;
}
Есть ли такие инструменты на php? И жизнеспособна ли идея в принципе?