Задать вопрос
zetamen
@zetamen
В поисках нового

Механизм для модульного тестирования без базы данных?

В 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? И жизнеспособна ли идея в принципе?
  • Вопрос задан
  • 766 просмотров
Подписаться 2 Оценить Комментировать
Решение пользователя matperez К ответам на вопрос (3)
@matperez
Чем вам не нравится вариант с частичными моками? Вам ведь нужно не CRUD как таковой протестировать, а корректную реакцию окружающего кода на то как ведет себя модель ActiveRecord. Мокайте методы CRUD, остальное пусть работает как есть.
Ответ написан