Zend Framework 2 Tips: Usando Doctrine em testes unitários
Introdução
Neste artigo vamos aprender como instanciar o Entity Manager do Doctrine nas classes de teste unitário no Zend Framework 2. Se você usa Doctrine no seu projeto, é bem provável que algumas classes que precisará testar possuem a dependência do Entity Manager. É sobre isso que trata esse artigo.
Caso necessário, em artigo anterior, já vimos como instalar os módulos Doctrine, ZFTool e Firephp no Zend Framework 2.
Registrando os módulos do Doctrine no Config de testes
Se você criou seu módulo do Zend Framework através do ZFTool provavelmente foi criado uma pasta chamada test/ dentro do diretório pai do seu módulo. No caso de exemplo do módulo Application, que já vem instalado no esqueleto inicial do projeto, o caminho ficaria: module/Application/test/.
O primeiro passo é registrar os módulos do Doctrine dentro do arquivo TestConfig.php.dist que esta dentro do diretório test/ do seu módulo:
<?php // module/Application/test/TestConfig.php.dist return array( 'modules' => array( 'Application', 'DoctrineModule', 'DoctrineORMModule' ), 'module_listener_options' => array( 'config_glob_paths' => array( '../../../config/autoload/{,*.}{global,local}.php', ), 'module_paths' => array( 'module', 'vendor', ), ), );
Bootstrap
Existe um arquivo chamado Bootstrap.php dentro do diretório test/ do seu módulo. Esse arquivo é responsável por inicializar todos os parâmetros necessários para que você possa trabalhar com testes unitários no Zend Framework.
Vamos criar dentro do arquivo Bootstrap.php um método estático que será responsável por retornar o Entity Manager do Doctrine. É através deste método que vamos acessar o Entity Manager em nossos testes:
<?php // module/Application/test/Bootstrap.php .. public static function getEntityManager() { $sm = static::getServiceManager(); return $sm->get('doctrine.entitymanager.orm_default'); } } Bootstrap::init();
Acessando o Entity Manager
Por final, vamos acessar o Entity Manager dentro de nossas classes de teste. Podemos estar testando um Controller, um Model ou qualquer outro componente. Basta chamarmos o método estático Bootstrap::getEntityManager();.
Não se esqueça de usar o namespace do Bootstrap no início do seu script:
<?php // module/Application/test/ApplicationTest/Model/AlbumTest.php namespace ApplicationTest\Model; use ApplicationTest\Bootstrap; //.... setUp, etc. public function testAlbum() { $em = Bootstrap::getEntityManager(); $album = new Album($em); }Ler Post Completo | Make a Comment ( None so far )