PHPUnit / Zend_Test: PDOException: No se puede serializar o unserialize casos PDO
-
11-10-2019 - |
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
Solución 3
Ya hace algún tiempo, pero creo que He arreglado el problema eliminando el uso de Zend_Registry
de bootstrap.php
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);