Модульное тестирование объектов Doctrine с помощью PHPUnit

StackOverflow https://stackoverflow.com/questions/299255

  •  08-07-2019
  •  | 
  •  

Вопрос

Я начинаю пытаться тестировать свои объекты Doctrine с помощью PHPUnit и хотел бы каждый раз заново загружать БД из объектов моей модели.

Моя первая попытка выглядит примерно так:

class Tests_User extends PHPUnit_Framework_TestCase
{

    public function setUp()
    {

        Doctrine_Manager::connection('mysql://user:pass@localhost/testdb');

        Doctrine::createDatabases();
        Doctrine::createTablesFromModels('../../application/models');

    }

    public function testSavingWorks()
    {

        $user = new User();
        $user->save();

    }

    public function testSavingWorksAgain()
    {

        $user = new User();
        $user->save();

    }

    public function tearDown()
    {

        Doctrine::dropDatabases();

    }

}

Проблема заключается в том, что при повторном вызове setUp () для второго теста createTablesFromModels () завершается ошибкой, поэтому я получаю сообщение об ошибке, поскольку ни одна из таблиц отсутствует.

Я был бы очень признателен за пример того, как кто-то еще повторно инициализировал соединение Doctrine для PHPUnit или других целей модульного тестирования.

Это было полезно?

Решение

Получается, что createTablesFromModels включает в себя файлы, а затем сравнивает списки определенных классов до и после, поэтому он не работает дважды.

Последовательность, подобная следующей, работает при повторении:

Doctrine::loadModels($path);
Doctrine::createTablesFromArray(Doctrine::getLoadedModels());

Другие советы

Ознакомьтесь с этим Gist от Ocramius, который показывает, что вы можете тестировать, используя фиксации данных: https: // gist .github.com / Ocramius / 3994325

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top