Frage

Ich erhalte die Ausnahme

PDOException: You cannot serialize or unserialize PDO instances

wenn ich versuche, PHPUnit für Unit-Tests zu verwenden. Ich habe nicht viel los. Ich verwende Zend Framework 1.11. Ich denke, es vielleicht, dass ich meine Anwendung Bootstrap haben die EntityManager in Zend_Registry speichern?

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

Für meinen Unit-Test, es sieht aus wie

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

Meine phpunit.xml sieht aus wie http://pastebin.com/BCv2Ci8R , ich glaube, das Hauptgebiet Sorge ist, Linie 1, also bootstrap.php sieht aus wie http://pastebin.com/hVZhJAG1

UPDATE

Ich habe festgestellt, dass das Problem beginnt, wenn ich die Linie habe

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

in bootstrap.php http://pastebin.com/hVZhJAG1

War es hilfreich?

Lösung 3

Es ist manchmal, aber ich denke, dass ich das Problem behoben durch Verwendung von Zend_Registry Entfernen von bootstrap.php

http://pastebin.com/BS79xviM

Andere Tipps

PHPUnit Sicherungen Globals. Wenn PDO ist irgendwo in $ GLOBALS oder innerhalb eines Objekts, das in $ GLOBALS ist erhalten Sie dieses Problem.

fand ich dieses Problem vor, nach der Suche im Internet habe ich eine Lösung von http: //www.phpunit .de / ticket / 376 . Gerade Satz backupGlobals auf false bei protected $backupGlobals = TRUE; in PHPUnit / Frameword / TestCase.php.

Aber PHPUnit Entwicklerteam nicht befürwortet, dass: die Mehrheit der Nutzer von PHPUnit es an der Arbeit erwartet, wie es funktioniert, wenn die Sicherung von $ GLOBALS Funktion aktiviert ist. Aus diesem Grunde ist es standardmäßig aktiviert ist.

Wenn Sie Ihre Tests ausüben Code dass puts unserialisierbar Objekte in $ GLOBALS Sie die Funktion deaktivieren. Von einer Software-Design-Perspektive, sollten Sie nicht eine globale Instanz von PDO muss mit beginnen.

Also, ich habe perfekte Lösung mit dieser:

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

nach Unit-Test-Code:

unset($db);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top