Pregunta

Me estoy haciendo la excepción

PDOException: You cannot serialize or unserialize PDO instances

cuando estoy tratando de usar PHPUnit para pruebas unitarias. No he mucho pasando. Estoy usando Zend Framework 1.11. Supongo que tal vez que he Bootstrapped mi solicitud almacenar el gestor de la entidad en Zend_Registry?

// application/Bootstrap.php -> _initDoctrine()
$em = EntityManager::create($doctrineOptions['connectionOptions'], $config);
Zend_Registry::set("em", $em);

Para mi prueba de la unidad, se ve como

class Application_Models_UserTest extends Zend_Test_PHPUnit_ControllerTestCase
  public function testUnitTest() {
    $this->assertTrue(true);
  }
}

Mis phpunit.xml miradas como http://pastebin.com/BCv2Ci8R , creo que la principal área de preocupación es la línea 1, Así miradas Bootstrap.php como http://pastebin.com/hVZhJAG1

Actualizar

He encontrado que el problema comienza cuando tengo la línea

$schemaTool->dropSchema($classes);
$schemaTool->updateSchema($classes);

en Bootstrap.php http://pastebin.com/hVZhJAG1

¿Fue útil?

Solución 3

Ya hace algún tiempo, pero creo que He arreglado el problema eliminando el uso de Zend_Registry de bootstrap.php

http://pastebin.com/BS79xviM

Otros consejos

PHPUnit copias de seguridad globales. Si DOP está en algún lugar de $ GLOBALS o dentro de un objeto que se encuentra en $ GLOBALS se obtiene este problema.

He encontrado este problema antes, después de buscar en la web me dieron una solución de http: //www.phpunit .de / entradas / 376 . Sólo hay que establecer backupGlobals en false en protected $backupGlobals = TRUE; en PHPUnit / Frameword / TestCase.php.

Pero el equipo desarrollador PHPUnit no abogan por que: la mayoría de los usuarios de PHPUnit espera que el trabajo como lo hace cuando está activada la copia de seguridad de $ GLOBALS función. Es por esto que se activa por defecto.

Si sus pruebas de esfuerzo código que pone en objetos unserializable $ GLOBALS se puede desactivar la función. Desde una perspectiva de diseño de software, no debe tener una instancia global de la DOP, para empezar.

Por lo tanto, tengo la solución perfecta usando la siguiente:

$db = SmartPHP_Db::factory($dbConfig);
SmartPHP_Pool::set("db" , $db);
SmartPHP_Db_Table::setDefaultAdapter($db);

después del código de la unidad de pruebas:

unset($db);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top