Question

Je reçois l'exception

  

PDOException: You cannot serialize or unserialize PDO instances

quand je suis en train d'utiliser PHPUnit pour les tests unitaires. J'ai pas grand-chose. J'utilise Zend Framework 1.11. Je suppose que peut-être que j'ai ma demande stocker la méthode bootstrap le gestionnaire d'entités dans Zend_Registry?

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

Pour mon test unitaire, il ressemble à

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

Mon phpunit.xml ressemble http://pastebin.com/BCv2Ci8R , je pense que la principale zone de préoccupation est la ligne 1, donc ressemble bootstrap.php comme http://pastebin.com/hVZhJAG1

UPDATE

J'ai trouvé que le problème commence quand j'ai la ligne

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

http://pastebin.com/hVZhJAG1

Était-ce utile?

La solution 3

Son été quelque temps, mais je pense que je résolu le problème en supprimant l'utilisation de Zend_Registry de bootstrap.php

http://pastebin.com/BS79xviM

Autres conseils

sauvegardes PHPUnit. GLOBALS Si PDO est quelque part dans $ GLOBALS ou à l'intérieur d'un objet qui est en $ GLOBALS vous obtenez ce problème.

Je trouve ce problème avant, après la recherche sur le web, je suis une solution de http: //www.phpunit .de / billet / 376 . Il suffit de définir backupGlobals false à protected $backupGlobals = TRUE; dans PHPUnit / Frameword / TestCase.php.

Mais l'équipe de développement de PHPUnit ne préconise pas que: la majorité des utilisateurs de PHPUnit attend qu'il fonctionne comme lorsque la fonction de sauvegarde de $ GLOBALS est activée. C'est pourquoi il est activé par défaut.

Si vos tests exercice code qui met des objets sérialisable dans $ GLOBALS vous pouvez désactiver la fonction. Du point de vue de la conception de logiciels, vous ne devriez pas avoir une instance globale de PDO pour commencer.

Alors, je me suis solution parfaite en utilisant ceci:

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

après le code de test unitaire:

unset($db);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top