Ответы пользователя по тегу Тестирование ПО
  • Тестирование базы данных на PHP (PHPUnit, DbUnit)

    @noRerih Автор вопроса
    Спасибо за подробный ответ.

    По поводу автоматической генерации и сравнения схем — об этом я тоже подумал, и думаю смысл всё же в этом есть. Ещё можно фикстуры генерить автоматически, основываясь на данных рабочей базы, потому что протестировать нужно очень много случаев, и необходимо чтобы различные связи между данными таблиц были соблюдены. Например есть пользователи и их посты. Нужно обязательно чтобы в фикстурах были юзеры, у которых есть один пост, несколько, ни одного. Конечно, при первичном формировании таких данных будет использоваться текущий, то бишь не протестированный код, но в принципе должно получиться.

    Но всё равно главное осталось мне неясным :(( Задача стоит протестировать не код, а работу сервиса, и то, что сервис обращается к БД, как раз дело и усложняет («предпологаем что бд работает корректно» — она-то так и работает, mysql отлаживают другие люди, а вот какие туда вызовы поступают — уже моя ответственность). Какие есть способы протестировать работу с базой без задействования базы? Какие именно данные нужно mock'нуть и где что проверять?

    вот есть например такой класс
    <?php
    // file app/User.php
      class User {
      ...
      public function create($params) {
        $this->pdo->prepare("INSERT INTO `users` ...");
        $this->pdo->execute($params);
      }
    }
    


    И тест
    <?php
    // file tests/TestUser.php
     function testUserIsCreatedSuccessfully() {
        ...
       $user->create(array('firstname'= > 'John', 'lastname' => 'Doe'));
       ...
       $this->assertTablesEqual($expectedTable, $queryTable);
      }
    


    Как именно и что нужно мокапить в функции, тестирующей добавление пользователя? Значит ли это, что нужно править тестируемый метод, чтобы он не в бд ещё писал, а делал нечто другое? Ведь, так или иначе, в коде теста вызывается тестируемый метод, пишущий в базу. Как узнать, что он корректно отработал, не обращаясь к БД?
    Ответ написан
    1 комментарий